Está en la página 1de 80

1.

Estructura de un programa en C++

1.1 El formato general de un programa en C++ es el siguiente:

ENCABEZADO

/
|

<

|
\

Definicin de constantes y macros,


declaracin de variables globales,
Inclusin de archivos.

void main(void) <---linea de cabecera de la funcin principal.


{ <-------------Inicio de bloque.
.........
.........
......... <---Cuerpo de la funcin principal.
.........
} <-------------Fin de bloque.

En el listado 1.1 se muestra un programa que despliega en la pantalla del monitor


el mensaje:
El Lenguaje C++ es poderoso
// PRIMER.CPP
//
// Despliega un mensaje en la pantalla.
#include <stdio.h>

// Para utilizar la funcin printf()

void main(void)
{
printf("El lenguaje C++ es poderoso\n");
}
Listado 1.1.- Primer programa en C++

1.2.- Archivos de cabecera.

El listado 1.1 contiene la lnea :


#include <stdio.h>

En ella, stdio.h es el nombre de un archivo de cabecera en el cual se


encuentran declarados los prototipos de las funciones y macros que se
utilizan para la entrada/salida estndar. Existe un extenso grupo de archivos
de cabecera, y cada uno de ellos sirve para manejar un grupo de funciones
relacionadas. La extensin h de estos archivos es la inicial de la palabra
header.
Generalmente estos archivos se incluyen en las primeras lneas de los

archivos que contienen el cdigo fuente de los programas en C++ . El


compilador de C++ desplegar un mensaje de error cuando se trate de
utilizar una funcin sin antes haber incluido el archivo de cabecera que
contiene el prototipo de ella.
Los archivos de cabecera son almacenados en el directorio INCLUDE cuando
se instala el paquete del compilador.
1.3.- Comentarios.
En el C++ existen dos formas de manejar los comentarios:
La primera sirve para escribir comentarios que abarcan varias lneas, y
utiliza los caracteres /* para marcar el inicio de un comentario, y los
caracteres */ para marcar el final, como se ve en los siguientes ejemplos:
/* Este es un pequeo comentario */
/* Este es otro comentario, pero a diferencia del
anterior, utiliza varias lneas.
Observe que tambin puede incluir lneas en blanco (como la
anterior y la
siguiente).
*/

La segunda forma solo sirve para comentarios que abarcan una lnea o
parte de ella, y utiliza los caracteres // al principio del comentario. El fin del
comentario queda marcado por el fin de la lnea, como se muestra a
continuacin:
// Este es un comentario de una lnea,
// y este es otro.
void main(void)

// Este comentario ocupa parte de la lnea.

Los comentarios de una sola lnea pueden anidarse dentro de los


comentarios de varias lneas, como en :
/* El principio del comentario de varias lneas.
// Primer comentario de una sola lnea.
// Segundo comentario de una sola lnea.
*/ Fin del comentario de varias lneas.

1.4.- Directivas del preprocesador


El preprocesador es un programa que viene incluido en los compiladores de
C++, y se encarga de ejecutar ciertas rdenes llamadas DIRECTIVAS DEL
PREPROCESADOR. Estas directivas empiezan con el carcter # ( Numeral ).
Al inicio de la compilacin, el compilador invoca al preprocesador, quien
acta de acuerdo a la directiva correspondiente.
Las directivas del preprocesador pueden clasificarse en tres grupos
principales:
1.4.1.- Inclusin de archivos
2

Pueden incluirse los contenidos de otros archivos de texto en el archivo que


contiene cdigo en C++ . Esto se logra por medio de la directiva #include
en cualquiera de las tres formas siguientes :

#include <nombre_archivo>
/* nombre_archivo se buscar solamente en el directorio INCLUDE */
#include "nombre_archivo"
/* nombre_archivo se buscar en el directorio de trabajo actual */
#include "d:\trayectoria\nombre_archivo"
/* En este caso, nombre_archivo ser buscado en el directorio especificado en
trayectoria */
Ejemplo:
#include "C:\DATOSCPP\PANTALLA.C"
1.4.2.- Reemplazamiento de cadenas y procesamiento de macros
El reemplazamiento de cadenas consiste en sustituir (antes de efectuar la
compilacin) cada una de las ocurrencias de cierta cadena (llamada
constante simblica) por otra cadena equivalente. Esto de logra por medio
de la directiva #define, como se muestra en los siguientes ejemplos:
#include <stdio.h>
#define CADENA "El Lenguaje C++ es poderoso\n"
void main(void)
{
printf(CADENA);
}

En este caso, el preprocesador sustituir CADENA por El Lenguaje C++ es


poderoso, de tal manera que el compilador se encontrar con la instruccin:
printf("El Lenguaje C++ es poderoso\n");
#define VALMAX 1000

Aqu, se est definiendo la constante simblica VALMAX, cuyo valor ser el


entero 1000.
La directiva #define tambin sirve para declarar macros, las cuales incluyen
una ms instrucciones del Lenguaje C++ , como en:
#define CUBO(N) ((N)*(N)*(N))

Esta macro puede utilizarse en una instruccin de la siguiente forma:


r = CUBO(5);

El preprocesador sustituye lo anterior por:


r = ((5)*(5)*(5));

Las macros pueden tomar formas complejas y ocupar varias lneas de


cdigo, como se muestra en el siguiente ejemplo:
#define REDOND(x) ((x)>=0?((x)+1/VALOR1)*(1-1/VALOR1): \
((x)-1/VALOR1)*(1+1/VALOR1))

Obsrvese que al final de la primera lnea se escribi una diagonal invertida


( \ ), la cual sirve como enlace.
1.4.3.- Compilacin condicional
Existe un grupo de directivas del preprocesador que permiten controlar
cuales partes del cdigo fuente se van a compilar al cumplirse ciertas
condiciones. A continuacin se muestra una lista de tales directivas;
dejndose la ejemplificacin de su uso para unidades ms avanzadas de
este trabajo.
#if
#ifdef
#if defined(algo)
#ifndef
#else
#elif
#endif

Adems de las directivas vistas hasta aqu, existen las siguientes:


#error
#pragma inline
#pragma warn
#pragma saveregs

1.5.- La Funcin main()


Todo programa de C++ debe contener una funcin llamada main()
(principal), la cual sirve de enlace con el sistema operativo que se est
utilizando. Cuando se intente obtener un programa ejecutable(.EXE ) a partir
de un archivo que no contenga una funcin main(), el compilador
desplegar un mensaje de error.
Al invocar a un programa escrito en C++, desde el indicador de presencia
del sistema operativo, se le pueden pasar ciertos valores que se llaman
argumentos, los cuales van a ser recibidos por la funcin principal. Esta, a
su vez, va a regresar un valor de retorno al sistema operativo que la invoc.
La devolucin del valor de retorno se hace por medio de la instruccin
return, por ejemplo:

return 0 ;

La explicacin acerca de la utilizacin de argumentos en la funcin main()


requiere del conocimiento de apuntadores, por lo que se tratar en la
unidad 6.
1.6.- Identificadores
Los nombres que son utilizados para referenciar variables, funciones,
etiquetas y dems objetos que se manejan con el Lenguaje C++, son
referidos en forma genrica como identificadores.
1.6.1.- Identificadores creados por el usuario
El usuario debe cuidar que los identificadores creados por l cumplan las
siguientes:
4

Reglas generales para los identificadores:


1.- Pueden estar formados por:
a.- Letras maysculas y/o minsculas.
b.- El carcter de subrayado.
c.- Los dgitos del 0 al 9.
2.- El primer carcter debe ser una letra o el carcter de subrayado.
3.- Pueden contener un nmero arbitrario de caracteres; pero Borland C++
considera como significativos los primeros 32 o los n primeros que
decida el programador, donde:
1 <= n <="32"
4.- Se toma en cuenta la diferencia entre letras maysculas y minsculas,
por lo que : SUMA, Suma y suma son identificadores diferentes.
5.- No puede utilizarse el mismo identificador para dos objetos que se
encuentren dentro del mismo mbito.
1.6.2.- Palabras reservadas
Las palabras reservadas, como su nombre lo indica, son identificadores que
tienen asignado un uso especfico y no podrn ser utilizadas como
identificadores creados por el usuario.
La tabla 1.1 muestra las palabras reservadas de Borland C++
+

@
@
+
@
+

_asm
asm
auto
break
case
_cdecl
cdecl
char
class
const
continue
_cs
default
delete
do
double

@
@
@
@
@
@
+
@
+

_ds
else
enum
_es
_export
extern
_far
far
_fastcall
float
for
friend
goto
_huge
huge
if
inline

@
@
@
@
+
+
@
@
+
+
+
@

int
_interrupt
interrupt
_loadds
long
_near
near
new
operator
_pascal
pascal
private
protected
public
register
return
_saveregs

+
+

_seg
short
signed
sizeof
_ss
static
struct
switch
template
this
typedef
union
unsigned
virtual
void
volatile
while

Tabla 1.1.- Palabras reservadas de Borland C++.


Las palabras marcadas con + en la tabla 1.1 son las palabras reservadas
especficas de C++, las marcadas con @ son las palabras aadidas por
Borland al C, y las palabras sin marca son las palabras reservadas del C
estndar.
1.7.- Entrada/Salida

En el Lenguaje C++, la entrada/salida se maneja de dos formas.


La primera consiste en la utilizacin de las funciones cuyos prototipos
vienen declarados en el archivo stdio.h, y es la forma que tradicionalmente
ha utilizado el Lenguaje C.
La segunda es propia del C++ y consiste en el manejo de objetos y
operadores cuyas definiciones se encuentran en el archivo iostream.h .
A continuacin explicaremos cada una de estas dos formas.
1.7.1.- Funciones declaradas en stdio.h
En esta forma, se requiere la inclusin de la siguiente lnea al principio del
programa fuente:
#include <stdio.h>

En el archivo stdio.h se encuentran definidos, entre otros, los prototipos de


las funciones printf(), scanf(), gets() y puts() adems de las macros getc(x) y
putc(). A continuacin analizaremos cada una de estas funciones y macros:
1.7.1.1.- La funcin printf()
Esta funcin es la mas utilizada en C para desplegar informacin en la
pantalla, ms no en el lenguaje C++ como veremos ms adelante.
El formato general para la funcin printf() es:
printf(<cadena_formato> , <elem> , <elem> , ... );

donde:
cadena_formato es una cadena de caracteres encerrada entre comillas
dobles. Esta cadena es enviada a la pantalla ( la
salida estndar ) despus de haber sustituidos los
elementos listados despus de la cadena.

La sustitucin de los elementos se hace de acuerdo a los comandos de


formato incluidos en cadena_formato, los cuales empiezan con un smbolo
de porciento ( % ) .
En la tabla 1.2 se muestran los comandos de formato ms usuales:

Comando

Sirve para:

%d

Entero

%u

entero sin signo

%ld

entero largo

%p

valor de apuntador

%f

nmero de punto flotante

%e

nmero de punto flotante en valor exponencial

%c

Carcter

%s

cadena de caracteres

%x

entero en formato hexadecimal

%o

entero en formato octal

Tabla 1.2.- Comandos de formato.


A fin de poder mostrar algunos ejemplos de aplicacin de la funcin printf(),
se presenta aqu la tabla 1.3 que contiene los tipos de datos disponibles en
el compilador de Borland C++ 3.1.

Tipo

Tamao (bits)

char

-128 a 127

unsigned char

0 a 255

enum

16

-32,768 a 32,767

int

16

-32,768 a 32,767

short int

16

-32,768 a 32,767

unsigned int

16

0 a 65,535

long

32

-2,147'483,648 a 2,147'483,647

unsigned long

32

0 a 4,294'967,295

float

32

7 dgitos

3.4E-38 a 3.4E+38

double

64

15 digitos

1.7E-308 a 1.7E+308

long double

80

19 digitos

3.4E-4932 a 3.4E+3932

void

Precisin

Rango de valores:

near pointer

16

Direcciones de memoria

far pointer

16

Direcciones de memoria

Tabla 1.3.- Tipos de datos, tamaos y rangos en Borland C++ 3.1


1.7.1.2.- La funcin scanf()
Esta funcin toma la entrada, normalmente del teclado, y la almacena en
variables previamente
declaradas. El formato para la funcin scanf() es :
scanf( <cadena_formato> , <elem> , <elem> , ... ) ;

Los significados de <cadena_formato> y <elem> son los mismos que en el caso de la


funcin printf() . La funcin scanf() utiliza la mayora de los comandos mostrados en la
tabla 1.2 La funcin scanf() debe utilizarse con cautela cuando se van a introducir
valores numricos y de cadenas de caracteres en una sola instruccin.
1.7.1.3.- Las funciones gets() y puts()

Las funciones scanf() y printf() sirven para varios formatos, por lo cual son muy
voluminosas. Es por esto que se han desarrollado las funciones gets() y puts(),
especficas para la entrada/salida de cadenas de caracteres.
La funcin gets() toma una cadena de caracteres desde el teclado y la almacena en la
variable cuyo identificador aparece como argumento en la invocacin a gets(), como en:
gets(nombre);

La funcin puts() despliega en la pantalla una cadena de caracteres que se


encuentra almacenada en la variable cuyo identificador aparece como
argumento en la invocacin a la funcin puts().
1.7.1.4.- Las macros getc() y putc()

La macro getc(c) toma un caracter desde el teclado y lo almacena en la variable c.


Por su parte, putc() despliega un caracter en la pantalla. Estas macros estn definidas en
el archivo stdio.h .
1.7.2.- Funciones declaradas en conio.h.

La consola es un concepto heredado de los ambientes multiusuario, y est formada por


el teclado y el monitor. En las implementaciones de Borland C++ existe una serie de
funciones que manejan la entrada/salida por la consola, entre otras:

clrscr(), que limpia la pantalla y posiciona el cursor en la esquina superior izquierda


de la ventana actual.

gotoxy(a,b), posiciona el cursor en la posicin establecida por la columna a y el


rengln b.

window(a,b,x,y), establece la ventana actual. Los valores a,b pertenecen a la columna


y el rengln de la esquina superior izquierda; los valores x,y corresponden a la
columna y el rengln de la esquina inferior derecha de la nueva ventana.

getch(), toma un carcter desde el teclado y no lo despliega en la pantalla.


getche(), toma un carcter desde el teclado y lo despliega en la pantalla.
Para poder utilizar las funciones relacionadas con la consola, es necesario
incluir la linea:
#include <conio.h>

Donde conio.h es el archivo de cabecera donde se encuentran declarados los prototipos


de las funciones que manejan la entrada/salida estndar por la consola.
Los listados 1.2 a 1.8 muestran ejemplos de utilizacin de formatos por
medio de algunas funciones antes mencionadas
// IMPRIME ENTEROS EN "DECIMAL"

#include<stdio.h>
#include<conio.h>
int main()
{
int y=12345;
printf("%13d\n",y);
getch();
return 0;
}

Listado 1.2
// IMPRIME ENTEROS EN OCTAL
#include<stdio.h>
#include<conio.h>
int main()
{
int y=12345;
printf("y = %13d EN DECIMAL\n",y);
printf("y = %13o EN OCTAL\n",y);
getch();
return 0;
}

Listado 1.3
// IMPRIME ENTEROS EN HEXADECIMAL
#include<stdio.h>
#include<conio.h>
int main()
{
int y=12345;
printf("y = %13d EN DECIMAL\n",y);
printf("y = %13x EN HEXADECIMAL\n",y);
getch();
return 0;
}

Listado 1.4
// IMPRIME ENTEROS SIN SIGNO

#include<stdio.h>
#include<conio.h>
int main()
{
int y= -12345;
printf("y = %13d ENTERO CON SIGNO\n",y);
printf("y = %13u ENTERO SIN SIGNO\n",y);
getch();
return 0;
}

Listado 1.5
// IMPRIME NUMEROS CON PUNTO FLOTANTE
#include <stdio.h>
#include<conio.h>

int main()
{
float
x=123.45;
double y=678.90;
printf("x = %12.2f\ny = %12.1f\n",x,y);
getch();
return 0;
}

Listado 1.6
// IMPRIME CARACTERES
#include <stdio.h>
#include<conio.h>
int main()
{
char a='X', b='Y', c='Z' ;
printf("%c%c%c\n",a,b,c);
getch();
return 0;
}

Listado 1.7
// IMPRIME CADENAS DE CARACTERES
#include <stdio.h>
#include<conio.h>
int main()
{
/*
Formato: %[-a.b]s
donde: - JUSTIFICA A LA IZQUIERDA
a NUMERO DE ESPACIOS DISPONIBLES PARA DESPLEGAR
b NUMERO MAXIMO DE CARACTERES QUE PUEDEN DESPLEGARSE
*/
printf("\n%10s","DESPLEGADO DE CADENAS EN LENGUAJE C++");
printf("\n%-10s","DESPLEGADO DE CADENAS EN LENGUAJE C++");
printf("\n%25.10s","DESPLEGADO DE CADENAS EN LENGUAJE C++");
printf("\n%-25.10s","DESPLEGADO DE CADENAS EN LENGUAJE C++");
printf("\n%.10s","DESPLEGADO DE CADENAS EN LENGUAJE C++");
getch();
return 0;
}

Listado 1.8
Para desplegar el smbolo de porciento puede escribirse en
cadena_formato : % . Por ejemplo:
..........
..........
int utilidad;
utilidad = 30;
printf("La utilidad es del %2d %\n", utilidad);
..........

10

desplegar :
La utilidad es del 30 %

1.7.3.- Objetos declarados en iostream.h

C++ provee una nueva forma para manejar la entrada/salida, proporcionando una
sintaxis ms sencilla, elegante e intuitiva que la de stdio.h , adems de un mecanismo
ms eficiente y flexible. La palabra iostream tiene su origen en las palabras: input
output stream , por lo que puede traducirse como flujo de entrada/salida. El flujo de
entrada/salida es utilizado para enviar datos desde una fuente ( productor ) a un destino (
consumidor ) . En esta forma se tiene una vasta jerarqua de clases para el manejo de
entrada/salida para archivos y dispositivos. En el archivo iostream.h se encuentran
definidos los objetos cin y cout.
El objeto cin utiliza al operador sobrecargado >> para tomar datos desde la entrada
estndar (habitualmente el teclado). El objeto cout utiliza al operador sobrecargado <<
para enviar datos hacia la salida estndar (normalmente la pantalla). Veamos como se
utilizan estos elementos en un pequeo ejemplo:
#include <iostream.h>
int main()
{
char nombre[30];
cout << "CUAL ES TU NOMBRE ? " ; cin>> nombre ;
cout << "\n" ; cout << "!! HOLA , " << nombre << " !! \n" ;
system("PAUSE");
return 0 ;
}

Listado 1.9.- Ejemplo de utilizacin de cin y cout


Tambin es posible especificar el ancho de un campo por medio del manipulador setw(),
que se encuentra declarado en iomanip.h ; as como los manipuladores window(),
clrscr() y gotoxy() declarados en constrea.h, como se muestra en el listado 1.10.
#include <iostream.h>
#include <iomanip.h>
#include <constrea.h>
int main()
{
char nombre[10] ;
int numero = 150 ;
float sueldo ;
constream ventana0, ventana1, ventana2 ;
ventana0.window(1,1,80,25);
ventana1.window(10,05,20,05);

11

ventana2.window(10,07,40,07);
ventana0.clrscr();
ventana1.clrscr();
cout << "NUMERO: " << setw(3) << numero;
cout << " NOMBRE : " ; cin.getline(nombre,10);
ventana2.clrscr();
cout << "\nSUELDO : $ " ; cin>> sueldo ;
return 0;
// verificar http://faculty.salisbury.edu/~dxdefino/constrea.htm

Listado 1.10.- Uso de manipuladores.

2.- Constantes, variables, operadores

En esta unidad se trata el manejo de los objetos donde se almacenan los


datos, as como las operaciones que pueden realizarse con los valores
almacenados.
En este contexto, llamaremos objeto a una regin identificable de memoria
que puede almacenar un valor fijo o variable. No debe confundirse el
significado que se d aqu al vocablo objeto con el que tiene en la
Programacin Orientada a Objetos.
2.1.- Constantes

Podemos definir a una constante como una localidad de memoria (objeto), la cual tiene
un nombre y un tipo de dato asociados, adems de un valor que permanece fijo durante
el tiempo de ejecucin.
En la unidad 1 se estudi la manera de definir constantes por medio de la directiva
#define . Aqu definiremos a las constantes utilizando el modificador const, usando del
formato mostrado a continuacin:
const <tipo> <identificador> = <valor>

Ejemplo: const int iva = 10 ;


Los valores para las constantes, permitidos por Borland C++, se clasifican en cuatro
clases:
I).- Enteros, que pueden escribirse en formato:
I.a).- Decimal, con valores de 0 a 4,294'967,295.
Ejemplo:

const int smin = 15300 ;

I.b).- Octal, que deben empezar con un 0 (cero).


Ejemplo:

const int lim = 030 ; (decimal 27)

I.b).- Hexadecimal, que empiezan con 0X 0x (cero x)


Ejemplo:

const int mem = 0xFFFF ;

12

II).- Caracteres, compuestos de uno o ms caracteres encerrados entre comillas


sencillas (apstrofes).
Ejemplo: const char inicial = 'A' ;

Para manejar los caracteres de control se utilizan las secuencias de escape que
empiezan con el carcter de diagonal hacia atrs (\) seguida de un carcter. Si el
carcter que sigue a la diagonal es alguno de los caracteres mostrados en la tabla 2.1,
se obtendr el efecto explicado en ella; pero si es cualquiera de los dems caracteres
del Cdigo ASCII, se visualizar el carcter tal cual.
Secuencia

Caracter

Efecto

\a

BEL

\b

BS

Retroceso

\f

FF

Alimentacin de forma

\n

LF

Nueva lnea

\r

CR

Retorno de carro

\t

HT

Tabulacin horizontal

\v

VT

Tabulacin vertical

\\

Diagonal hacia atrs

\'

'

Comilla sencilla

\"

"

Comilla doble

\?

Interrogacin

Sonido de la bocina

\O

Cualquiera O=Nmero octal de hasta tres dgitos

\x

Cualquiera H=Nmero hexadecimal


Tabla 2.1.- Secuencias de escape.

Borland C++ permite el uso de dos caracteres juntos como valores de caracteres.
Por ejemplo: 'AB' , '\n\t' , '\007\007'

III).- Punto flotante, cualquiera con punto decimal con formato exponencial.
Ejemplos:

3.135 , 0. , .0

, 34e3 , -3.4 ,

.075E12

IV).- Enumeracin, son identificadores definidos en declaraciones de tipo enum.


Ejemplo:

enum frutas { pera, uva, manzana, fresa } ;

donde: pera, uva, manzana y fresa son constantes de enumeracin y tienen los
siguientes valores:
pera
uva
manzana
fresa

=
=
=
=

0
1
2
3

13

Pueden asignarse valores explcitos como en:


enum frutas {pera, uva , manzana = 10 , fresa = uva+5} ;

y entonces :
pera
uva
manzana
fresa

= 0
= 1
= 10
= 6

2.2.- Variables

Una variable es un espacio de memoria que tiene un nombre y un tipo de dato


asociados, adems de un valor que puede cambiarse durante el tiempo de ejecucin.
En el Lenguaje C++ puede declararse una variable en cualquier lugar del programa, con
la nica restriccin de que la declaracin preceda a la primera instruccin donde se
utiliza tal variable.
El formato para la declaracin de una variable o grupo de variables es el siguiente:
[, var2, ... ] ;
Ejemplos:
int algo, otro ;
int suma = 0 , inicial = 1 ;
float desc , acum = 0 ;
char prim = 'A' , seg ;

2.3.- Ambito

El mbito es una zona de programa donde puede utilizarse un identificador para accesar
su objeto . El mbito va a depender, bsicamente, del lugar del programa en que aparece
la declaracin.
Bajo este enfoque, se tienen las siguientes clases de mbito:
Ambito de BLOQUE.
En el Lenguaje C++, se generaliza el concepto de mbito local, a travs de la
introduccin del concepto de bloque.
Un bloque est formado por las instrucciones delimitadas por un par de llaves { }.
Es posible anidar una serie de bloques, y pueden declararse variables dentro de cada
bloque. Si, en diferentes bloques, existen variables con el mismo identificador, todas
sern consideradas como variables diferentes. As que puede tenerse:
..............

14

..............
int x=5;
{
int x=10;
{
int x=20;
{
int x=30;
printf("x=%d",x);
}
printf("%d",x);
}
printf("%d",x);
}
printf("%d",x);
.............
.............

// x del bloque 1
// x del bloque 2
// x del bloque 3
// x del bloque 4
// x=30
// x=20
// x=10
// x=5

Debe tenerse cuidado al utilizar identificadores iguales para diferentes variables. Lo ms


recomendable es no utilizar los mismos identificadores y no intentar manejar variables
en un mbito diferente al que pertenecen.
Ambito de FUNCION.
En esta clase slo se encuentran los identificadores que se utilizan como etiquetas
cuando se tienen instrucciones goto. El identificador de una etiqueta debe ser nico
dentro de una funcin, y no puede utilizarse la instruccin goto para saltar de una
funcin a otra.
Ambito de PROTOTIPO DE FUNCION.
El mbito de los identificadores utilizados dentro de los parntesis en la declaracin de
prototipo de una funcin, finaliza con la declaracin del prototipo.
Ambito de ARCHIVO.
Las variables declaradas fuera de cualquier bloque en un archivo son consideradas como
variables globales, y el mbito de sus identificadores abarca todos los bloques
contenidos en el archivo en cuestin; por lo que: una variable con ste mbito puede ser
utilizada en las funciones del archivo que estn definidas despus del punto donde se
declar dicha variable.
2.4.- Duracin

La duracin define el periodo de tiempo durante el cual los identificadores declarados


tienen objetos asignados en memoria. Las variables, por ejemplo, tienen memoria
asignada durante el tiempo de ejecucin.
Existen tres clases de duracin:
2.4.1.- Duracin esttica

15

Los objetos con duracin esttica estn localizados en memoria durante todo el tiempo
de ejecucin del programa. Las funciones, las variables con mbito de archivo y las
variables con especificadores de clase de almacenamiento static extern, tienen
duracin esttica. Los objetos con duracin esttica son inicializados a cero , en
ausencia de un valor inicial explcito.
2.4.2.- Duracin local

Los objetos de duracin local, conocidos tambin como objetos automticos, son
creados en la pila de la memoria RAM en los registros del microprocesador. La
memoria asignada a stos objetos es liberada cuando finaliza la ejecucin del bloque
donde fueron creados. Los objetos de duracin local deben utilizarse siempre en un
mbito local de funcin. Cuando se utiliza el especificador de clase de
almacenamiento register, se implica el uso del especificador de clase de
almacenamiento auto.
2.4.3.- Duracin dinmica

Los objetos de duracin dinmica se crean y se destruyen, por invocaciones a funciones


especficas, durante el tiempo de ejecucin de un programa. El almacenamiento de estos
objetos se d en el rea de reserva de la memoria RAM llamado montculo.
2.5.- Enlace

En la creacin de un programa ejecutable, primero se lleva a cabo la compilacin de


diversas unidades de traslacin, las cuales se componen del cdigo fuente junto con los
archivos incluidos. Posteriormente, el archivo objeto (.obj) , se enlaza con libreras
preexistentes para obtener el archivo ejecutable (.exe).
El enlace es el proceso que permite a cada instancia de un identificador asociarse
correctamente con un objeto o funcin particular. Todos los identificadores tienen uno
de los siguientes atributos de enlace, ntimamente relacionados con su mbito:
. ENLACE EXTERNO,
. ENLACE INTERNO,
. SIN ENLACE.
Estos atributos se determinan a travs del emplazamiento y los formatos de las
declaraciones, junto con el uso (implcito explcito) de los especificadores de clase de
almacenamiento static extern. Cada instancia de un identificador con enlace externo
representa al mismo objeto funcin a travs de todo el conjunto de archivos y libreras
que componen el programa.
Cada instancia de un identificador con enlace interno representa al mismo objeto
funcin solamente dentro de un archivo. Los identificadores sin enlace representan
entidades nicas.
A continuacin se presentan las:

16

REGLAS PARA LOS ENLACES INTERNO Y EXTERNO:


1. Cualquier identificador de objeto archivo que tenga mbito de archivo tendr
enlace interno si su declaracin contiene el especificador static.
Para C++, si el mismo identificador aparece con ambos tipos de enlace en el
mismo archivo, el identificador tendr enlace externo.
2. Si la declaracin de un identificador de un objeto funcin contiene el
especificador extern, el identificador tendr el enlace correspondiente a una
declaracin con mbito de archivo.
3. Si una funcin se declara sin un especificador de clase de almacenamiento, su
enlace est determinado como si se hubiera utilizado el especificador extern.
4. Si un identificador de objeto con mbito de archivo se declara sin especificador
de clase de almacenamiento, el identificador tendr enlace externo.
Los siguientes identificadores no tienen atributo de enlace:
a).- Cualquier identificador declarado para ser algo diferente de un objeto
funcin ( p.ej. un identificador typedef ).
b).- Los parmetros de las funciones.
c).- Los identificadores de mbito de bloque para objetos declarados sin el el
especificador extern.
Para aclarar lo relacionado con el especificador extern, revisemos los listados 2.1 y 2.2.
// EXTERN1.CPP
int edad; char nombre[31]; // DEFINICION de variables globales

Listado 2.1.- EXTERN1.CPP, que define las variables globales.


// EXTERN2.CPP
#include <iostream.h>
// DECLARACION de variables globales que:
extern int edad;
// se encuentran en otro archivo
extern char nombre[];
void main()
{
cout << "\nCUAL ES TU NOMBRE ? " ; cin>> nombre ;
cout << "\nCUANTOS AOS TIENES, " << nombre << " ?" ; cin>> edad ;
cout << "\n\n" ;
cout << " TE FALTAN " << 100-edad ;
cout << " PARA LLEGAR A LOS CIEN, " << nombre << "\n" ;
}

Listado 2.1.- EXTERN2.CPP, que declara y utiliza variables globales definidas en otro
archivo.
17

En el archivo EXTERN1.CPP se definen las variables globales edad y nombre.


Posteriormente se compila este archivo para obtener el archivo EXTERN1.OBJ.
En el archivo EXTERN2.CPP se declaran las variable edad y nombre utilizando el
modificador extern.
Finalmente, se crea un proyecto al que puede llamarse EXTERN.PRJ, en el cual se
incluyen los archivos EXTERN1.OBJ y EXTERN2.CPP; se compila el proyecto y se
obtiene el archivo ejecutable EXTERN.EXE
2.6.- Operadores

Los objetos que se manejan en C++ van a tener un tipo de dato asociado, el cual
determina la cantidad de espacio de almacenamiento que se le asigna a cada uno de los
objetos de tal tipo, as como el conjunto de operaciones que podrn realizarse con los
valores almacenados. Las operaciones sern representadas a travs de identificadores
especficos llamados operadores.
En esta seccin estudiaremos los operadores, agrupndolos en:
2.6.1.- Operadores arimticos

Los operadores aritmticos se aplican sobre objetos con valores numricos, como se
muestra en la tabla 2.2 .
Sean: X = 20 , Y = 30 , A = 100.0 , B = 200.0
Operador

Operacin

Ejemplo

Resultado

Adicin

Z=X+Y

Z=50

Sustraccin

Z=Y-X

Z=10

Multiplicacin

Z=X*Y

Z=600

Divisin

Z=Y/X

Z=1.5

Mdulo

Z=Y%X

Z=10

++

Incremento

X++

X=21

--

Decremento

X-

X=19

Tabla 2.2.- Operadores aritmticos.


2.6.2.- Operadores relacionales

Los operadores relacionales se usan para comparar los valores que resultan de reducir
expresiones. Los resultados coincidirn con los valores de verdad:
FALSO igual a CERO, VERDADERO diferente de CERO. Los operadores relacionales
en C++ son :
>

Mayor que

18

>=
<
<=
==
!=

Mayor igual que


Menor que
Menor igual que
Igual que
Diferente que ( No igual que )

2.6.3.- Operadores lgicos

Los operadores lgicos se aplican sobre los enunciados que resultan de las operaciones
relacionales, y el resultado siempre ser un valor de verdad. Los operadores lgicos son:
&&

( Conjuncin )

||

( Disyuncin )

NO

( Negacin )

2.6.4.- Operadores entre bits

Con estos operadores se puede realizar la comprobacin, colocacin desplazamiento


de los bits actuales de una variable de los tipos int y char.
Los operadores entre bits son:
&

( Conjuncin )

( Disyuncin )

( Disyuncin Exclusiva

XOR )

( Complemento a uno NOT )

>>

( Desplazamiento a la DERECHA )

<< ( Desplazamiento a la IZQUIERDA )

A continuacin se presentan ejemplos de algunas operaciones entre bits:


Ejemplo 2.6.1:
Supongamos que se quiere cambiar el bit de paridad ( el de la extrema izquierda ) de
uno a cero. Para esto puede utilizarse la operacin de conjuncin entre bits.
Si tenemos la declaracin:
char indice = 81 ;

y, suponiendo que se quiere cambiar el bit de paridad de 1 a 0 , la instruccin en C++ se


escribira :
indice & 127 ;

19

La operacin realizada a mano es :


11010001 <------ indice
operador> &
01111111 <------ 127 en binario
01010001 <------ resultado

En este caso se utiliz el nmero 127 porque es el nico nmero entero que puede
escribirse en un octeto ( byte ) y que tiene los siete primeros bits con valor 1 .
Ejemplo 2.6.2
Se requiere que en el nmero 112 tengan valor 1 los bits que correspondan con los del
nmero 7 que tengan valor 1. En este caso, la operacin a utilizar es la disyuncin entre
bits, quedando las instrucciones en la siguiente forma:
char masc ;
masc = 112 | 7 ;

La operacin manual tomara la siguiente forma:


01110000 <------ 112 en binario
operador> |
00000111 <------ 7 en binario
01110111 <------ resultado

Ejemplo 2.6.3
La disyuncin exclusiva sirve para poner a uno los bits del primer operando cuyos
correspondientes bits en el segundo operando sean distintos, como se ve a continuacin:
x = 125 ^ 120 ;
char x ;

Manualmente se tendra:
01111101 <------- 125 en binario
operador> ^
01111000 <------- 120 en binario
00000101 <------- resultado

Los operadores de desplazamiento mueven todos los bits, de una variable entera de
carcter, hacia la izquierda hacia la derecha. A medida que los bits son desplazados
hacia un extremo, los lugares desocupados del estremo contrario van siendo ocupados
por ceros. Los unos que salen por los extremos no se pueden recuperar(no hay rotacin).
2.6.5.- Operadores de asignacin

20

El estudio de los operadores de asignacin requiere del conocimiento de los conceptos


de valor izquierdo ( lvalue ) y de valor derecho ( rvalue ). Un valor izquierdo es una
expresin que designa un objeto. Las expresiones utilizadas como valor izquierdo
corresponden a objetos cuyos valores pueden cambiar durante la ejecucin de un
programa. Generalmente, en la expresin correspondiente a un valor izquierdo aparece
el identificador de una variable. Cuando el valor izquierdo se refiere a la direccin de
una variable, la expresin puede constar de una combinacin de varios identificadores.
Un valor derecho es una expresin formada por cualquier combinacin de objetos y
operadores que pueda ser reducida a un valor. Los operadores de asignacin sirven para
asignar un valor derecho a un valor izquierdo, y estn formados por la combinacin del
operador de asignacin simple = con otro operador, como se muestra en la tabla 2.3 .
Operador

Significado

Ejemplo:

Equivale a:

Asignacin mltiple

+=

Suma asigna

X+=Y

X=X+Y

-=

Resta asigna

X-=Y

X=X-Y

*=

Multiplicacin asigna

X*=Y

X=X*Y

/=

Divide asigna

X/=Y

X=X/Y

%=

Residuo asigna

X%=Y

X=X%Y

<<=

Dezplaz. izq. asigna

X<<Y

X=X<<Y

>>=

Dezplaz. der. asigna

X>>Y

X=X>>Y

&=

Conj. e/bits asigna

X&=Y

X=X&Y

^=

Disy. exclu. asigna

X^=Y

X=X^Y

|=

Disyuncin asigna

X|=Y

X=X|Y

Tabla 2.3.- Operadores de asignacin.


Los operadores estudiados hasta aqu no son todos los que existen en el C++, sino los
que a mi juicio son indispensables para iniciar el estudio del lenguaje. Si,
posteriormente, es necesario utilizar algn operador no tratado en esta unidad, en ese
momento se estudiarn las caractersticas particulares de tal operador.

3.- Instrucciones de control


En esta unidad estudiaremos las instrucciones que sirven para controlar el flujo de
ejecucin de un programa en C++ . De acuerdo a las caractersticas de cada una, las
clasificaremos en grupos de estructuras bsicas de:
Las estructuras bsicas deben cumplir con la condicin bsica de la Programacin
Estructurada de: slo una entrada, slo una salida.
3.1.- Secuencia

21

A este grupo pertenecen las instrucciones que estn formadas por una o varias
expresiones simples colocadas una a continuacin de la otra. La sintaxis para las
instrucciones estructuradas en secuencia es la siguiente:
instruccion_1 ;
instruccion_2 ;
.........
instruccion_N ;

Su diagrama de flujo se presenta en la figura 3.1.

Ejercicios
1. Elabore un programa que permita determinar la distancia (m) que recorre un mvil
que se desplaza con una velocidad (m/s) constante, despus de transcurrir un
determinado tiempo (s)
#include <stdio.h>
#include <conio.h>
int main()
{
int V;
int T;
int D;
printf("\n INGRESE ");
printf("\n ");
printf("\n Velocidad (m/s) : "); scanf("%i",&V);;
printf("\n Tiempo (s) : "); scanf("%i",&T);;
D= V*T;
printf("\n RESULTADO ");
printf("\n ");
printf("\n Distancia recorrida en metros es: %2.i ", D);
getch();
return 0;
}
22

2. Dado dos nmeros diferentes, determinar y mostrar la suma, resta y


multiplicacin de estos numeros.
3. Elabore programa que permita determinar la velocidad final (m/s) de un
auto que realiza un MRUV, conociendo la velocidad inicial (m/s), el
tiempo que transcurre (s) y la aceleracin (m/s)
Datos de prueba: Vi = 40 m/s; T = 12 s
A = 5 m/s
Vf = Vi + A*T
Vf: velocidad final Vi: velocidad inicial
A: aceleracin
T: tiempo
4. Elabore un programa que permita determinar el promedio que ha
obtenido un alumno en un determinado curso, conociendo las notas de:
tres prcticas, el examen parcial y el examen final.
Datos de prueba: P1 = 15; P2 = 17; P3 = 16; EP = 14; EF = 15
PP = ( P1 + P2 +P3 ) / 3
PROM = ( PP + 2*EP + 3*EF ) / 6
PP: promedio de prctica
PROM: promedio
EP: examen parcial EF: examen final
5. Elabore un programa que permita determinar el trabajo (joule) que
realiza un motor, conociendo la potencia (watt o vatios) que realiza en
un determinado tiempo (segundo).
Datos de prueba: potencia = 300 w ; tiempo = 5 s
6. Elabore un programa que permita determinar el rea (cm) de un
tringulo, conociendo su base (cm) y su altura (cm).
Datos de prueba: base = 6 cm; altura = 8 cm
7. Elabore un algoritmo/programa que permita determinar la hipotenusa
(cm) de un tringulo rectngulo, conociendo sus catetos (cm)
Datos de prueba: cateto1 = 4 cm;
cateto2 = 3 cm
8. Elabore un algoritmo/programa que permita convertir la velocidad de un
auto que esta en km/h a m/s
Dato de prueba: velocidad = 9 km/h
9. Elabore un algoritmo/programa que permita determinar el rea (cm) de
un tringulo equiltero, conociendo su lado (cm).
Dato de prueba: lado = 8 cm
10.Elabore un algoritmo/programa que permita determinar el rea (cm) de
un circulo, conociendo su radio (cm).
Dato de prueba: radio = 2 cm; = 3.1415
11.Elabore un programa que acepte los siguientes datos de un trabajador:
cdigo, nombre, horas normales de trabajo, pago por hora normal, horas
extras (el pago por hora extra es el 50% ms del pago por hora normal),
seguidamente se debe mostrar: importe por horas normales, importe por
horas extras y el importe total.
3.2.-Seleccin

A este grupo pertenecen aquellas instrucciones que sirven para que la ejecucin del
programa tome una de varias opciones existentes en una ramificacin.
En C++ se tienen las siguientes instruccins de seleccin:
3.2.1.- La instruccin if - else

Esta instruccin permite elegir entre dos opciones de ejecucin, y su sintaxis es :


23

donde:

if( condicin )
[bloque_1]
[else]
[bloque_2]
bloque_1 y bloque_2 pueden estar formados por uno
ms instrucciones.
else es opcional, y en caso de no existir, bloque_2
tampoco existir.

Al ejecutarse esta estructura, primero se evala la condicin. En caso de que, de esta


evaluacin, resulte un valor de verdad verdadero, se ejecutarn las instrucciones que
forman el bloque_1; en caso contrario (si el valor de verdad es falso), se ejecutarn las
instrucciones del bloque_2.
El diagrama de flujo para la estructura if-else se presenta en la figura 3.2.

Esta estructura puede anidarse para elgir entre un grupo de ms de dos opciones,
tomando la siguiente forma:
if(condicin_1)
bloque_1;
else if(condicin_2)
bloque_2;
else if(condicin_3)
bloque_3;
............
else
bloque_N;

A continuacin se muestran algunos ejemplos de aplicacin de la instruccin if-else


#include <iostream.h>
int main()
{
long ncontrol;

24

cout << "NUMERO DE CONTROL: "; cin>> ncontrol;


if(ncontrol<=0)
cout << "NUMERO INVALIDO.........";
else cout << "CORRECTO !!" << "\n\n\n";
system("PAUSE");
return 0;

Listado 3.1.- Uso de if-else


#include <iostream.h>
#include <conio.h>
int main()
{
int calif;
clrscr();
cout << "CALIFICACION: "; cin>> calif;
if(calif > 100)
cout << "ERROR: CALIFICACION DEMASIADO ALTA .....";
else if(calif < 0)
cout << "ERROR: CALIFICACION DEMASIADO BAJA .....";
else if( (calif>= 70) && (calif <=100))
cout << "CALIFICACION APROBATORIA.";
else cout << "CALIFICACION REPROBATORIA.";
getch();
return 0;
}

Listado 3.2.- Uso de if-else-if


Ejercicios (uso de if)
1. Elabore un programa que permita determinar la velocidad (m/s)
constante de un mvil que se ha desplazado una determinada distancia
(m), en un cierto tiempo (s). Se debe considerar que el valor del tiempo
debe ser mayor de cero
Datos de prueba:
Distancia = 146m; Tiempo = 5s
#include <stdio.h>
#include <conio.h>
int main()
{
float V;
int T;
int D;
printf("\n INGRESE ");
printf("\n ");
printf("\n Distancia (m) : "); scanf("%i",&D);
printf("\n Tiempo (s) : "); scanf("%i",&T);
if (T > 0)
V= static_cast<float>(D) / static_cast<float>(T);
printf("\n RESULTADO ");
printf("\n ");
printf("\n La velocidad en m/s es: %5.2f ", V);
getch();

25

return 0;
}
2. Elabore un programa que permita determinar el tiempo (s) que
transcurrir hasta que dos autos se encuentren, considerando que estos
autos separados una distancia (m) van uno al encuentro del otro con
velocidad constante (m/s)
Datos de prueba: distancia = 130 m
T= D / (V1 +
auto1: velocidad = 5 m/s
V2)
auto2: velocidad = 8 m/s
3. Elabore un programa que permita determinar el tiempo (s) que
transcurrir hasta que un auto alcanza al otro, se sabe que estos autos
separados una distancia (m) van en igual direccin con velocidad
constante (m/s). Considere la velocidad del primero auto mayor.
Datos de prueba: distancia = 120 m
T= D / (V1 auto1: velocidad = 9 m/s
V2)
auto2: velocidad = 6 m/s
4. Elabore un programa que permita determinar la aceleracin (m/s) de un
bloque que se encuentra en reposo, conociendo su masa (kg) y la fuerza
(Newton) horizontal que se le aplica. Se debe considerar que el valor de
la masa sea mayor de cero
Datos de prueba: Fuerza = 54 N;
Masa = 6 kg
5. Elabore un programa que permita determinar la potencia (watt o vatios)
que realiza un motor, conociendo el trabajo (joule) que realiza en un
determinado tiempo (segundo). El valor del tiempo debe ser positivo y
diferente de cero
Datos de prueba: trabajo = 1000 j ; tiempo = 5 s
6. Elabore un programa que permita determinar si un nmero ingresado es
un nmero entero.
Dato de prueba: nmero = 57
7. Elabore un programa que permita determinar si un nmero entero
positivo es nmero par.
Dato de prueba: numero = 38
8. Elabore un programa que permita expresar una cantidad dada en
segundos a horas, minutos y segundos. La cantidad debe ser entera y
mayor a cero
Dato de prueba: Cantidad = 8000 s

Ejercicios (uso de if else / if else - if)


1. Elabore un programa que permita determinar la velocidad (m/s)
constante de un mvil que se ha desplazado una determinada distancia
(m), en un cierto tiempo (s). Se debe considerar que los valores
ingresados sean positivos y mayores de cero
Datos de prueba: Distancia = 146 m; Tiempo = 5 s
#include <iostream.h>
#include <stdlib.h>
int main()
{
int D;
int T;
float V;
cout<<"\n INGRESE ";
cout<<"\n ";

26

cout<<"\n Distancia (m) : ";cin>>D;


cout<<"\n Tiempo (s) : ";cin>>T;
if
(T > 0 & D > 0)
{
V= static_cast<float>(D) / static_cast<float>(T);
cout<<"\n RESULTADO ";
cout<<"\n ";
cout<<"\n La Velocidad en m/s es : "<<V;
cout<<"\n ";
}
else
cout<<"\n Ingrese valores positivos y mayores a cero";
system("PAUSE");
return 0;

2. Elabore un programa que permita aceptar dos nmeros diferentes,


seguidamente se debe determinar y mostrar el mayor de los nmeros.
3. Elabore un programa que permita aceptar un nmero entero de dos
cifras, de tal manera que si sus cifras son pares se debe mostrar la suma
de estas cifras, pero si las cifras son impares se debe mostrar el producto
de estas cifras.
4. Elabore un programa que permita aceptar un nmero entero,
seguidamente se debe determinar y mostrar si el nmero es mltiplo de
siete.
5. Elabore un programa que permita aceptar un nmero entero menor a
31524, seguidamente se debe determinar y mostrar cuantas cifras tiene
dicho nmero.
6. Elabore un programa que permita aceptar un nmero entero de dos
cifras, seguidamente se debe mostrar el nmero ingresado pero con sus
cifras intercambiadas. Ej. Si el nmero ingresado es 38 se debe mostrar
83.
7. Elabore un programa que permita aceptar los siguientes datos de un
trabajador: cdigo, nombre, sueldo bsico, ao de ingreso a la empresa y
nmero de hijos.
Si los aos de servicio es mayor a 8 aos se le da una bonificacin de 10
soles por cada ao, en caso contrario se le da 4 soles por cada ao de
servicio. Si el numero de hijos es menor a 4 se le da 8 soles por cada
hijo, en caso contrario se le da slo 20 soles. El sueldo bruto es la suma
del sueldo bsico, la bonificacin por aos de servicio y la bonificacin
por los hijos. Si el sueldo bruto es mayor a 1500 soles se le hace un
descuento del 1.5% del sueldo bruto, en caso contrario el descuento es
el 0.5% del sueldo bruto. El sueldo neto es igual al sueldo bruto menos el
descuento.
Se pide realizar los clculos necesarios para mostrar las bonificaciones,
el sueldo bruto, el descuento y el sueldo neto.
8. Elabore un programa que permita aceptar un nmero entero,
seguidamente se debe determinar y mostrar si el nmero ingresado es
positivo, cero o negativo.
9. Elabore un programa que permita aceptar tres nmeros diferentes,
seguidamente se debe determinar y mostrar el mayor y menor de los
nmeros.
10.Elabore un algoritmo/programa que permita determinar las races reales
de una ecuacin de segundo grado (Ax + Bx + C).
Dato de prueba: x + 5x + 6
27

Para determinar las races puede utilizar

B B2 4AC B B2 4AC
2A
2A

3.2.2.- La instruccin switch

Esta instruccin es til cuando se tiene que elegir entre ms de dos opciones, como es el
caso de manejo de mens. Esta instruccin es preferible que el uso de anidamientos de
varios if-else.
Su sintaxis es:
switch(expresin_entera)
{
case Const_1 : Bloque_1 ; break ;
case Const_2 : Bloque_2 ; break ;
.............................
.............................
.............................
case Const_N : Bloque_N ; break ;
default : Bloque_X ;
}

A la entrada en una instruccin switch, primero se evala la expresin_entera. En caso


de que el resultado coincida con Const_1, se ejecuta el Bloque_1 y break interrumpe la
ejecucin del instruccin; en caso de que coincida con el valor de Const_2, se ejecuta el
Bloque_2 , se interrumpe la ejecucin de la instruccin. Lo mismo pasa en caso de que
el resultado coincida con cualquiera de los otros valores constantes. En caso de existir
default:, y si el resultado no coincide con ninguno de los valores constantes, se ejecutan
las instrucciones contenidas en el Bloque_X.
Esta estructura puede representarse con el diagrama mostrado en la figura 3.3.

28

Es recomendable el uso de la instruccin switch en el caso del manejo de un men de


opciones como se observa en el listado 3.3.

#include <iostream.h>
#include <conio.h>
void main()
{
char opcion;

clrscr();
gotoxy(30,5);
cout << "MENU DE OPCIONES"; gotoxy(30,8);
cout << "1.- CREACION"; gotoxy(30,10);
cout << "2.- MODIFICACION"; gotoxy(30,12);
cout << "3.- ELIMINACION"; gotoxy(30,14);
cout << "0.- SALIDA"; gotoxy(30,18);
cout << "SU OPCION ? "; opcion= getche();
cout << "\n\n";
switch(opcion)
{
case '1': clrscr(); cout << "RUTINA DE CREACION \n"; break;
case '2': clrscr(); cout << "RUTINA DE MODIFICACION \n"; break;
case '3': clrscr(); cout << "RUTINA DE ELIMINACION \n"; break;
case '0': clrscr(); cout << "SALIDA DE LA APLICACIN \n";break;
default: clrscr(); cout << "OPCION INVALIDA.....\n";
}

Listado 3.3.- Uso de switch

Ejercicios
29

1. Elabore un algoritmo/programa que acepte un nmero entero y positivo


desde 1 hasta 7 y permita determinar que da de la semana le
corresponde
Dato de prueba: Nmero = 3

#include<stdio.h>
#include<conio.h>
int main()
{
int N;
printf("\n INGRESE ");
printf("\n ");
printf("\n Numero desde 1 hasta 7 : ");scanf("%i",&N);
switch (N)
{
case 1:
printf("\n Lunes ");
break;
case 2:
printf("\n Martes ");
break;
case 3:
printf("\n Miercoles ");
break;
case 4:
printf("\n Jueves ");
break;
case 5:
printf("\n Viernes ");
break;
case 6:
printf("\n Sabado ");
break;
case 7:
printf("\n Domingo ");
break;
default:
printf("\n No existe el dia ");
}
getch();
return 0;
}
2. Elabore un programa que acepte un nmero entero desde 1 hasta 12
(representa un mes del ao) y permita determinar a que estacin del
ao pertenecen
Dato de prueba:
Nmero = 6
3. Elabore un programa que permita ingresar dos nmeros enteros y un
operador aritmtico (+, -, /, *), seguidamente se debe determinar el
resultado de la operacin que indica el operador.
Datos de prueba: A = 10 ; B = 5 ; OP = *

30

A: es el primer nmero; B: es el segundo nmero; OP: es el operador


4. Elabore un programa que permita aceptar el sueldo bsico de un
trabajador as como su categora (A, B, C). Se pide determinar cuanto se
le debe pagar si se sabe que si la categora es A se le descuenta el 3%
de su sueldo bsico; si es B se le bonifica con el 1% de su sueldo
bsico y si es C se le bonifica con el 2% de su sueldo bsico.
Datos de prueba:
SB = 1000 soles;
CAT = B
5. Elabore un programa que acepte un nmero entero hasta tres cifras,
seguidamente se debe determinar cuales de sus cifras tienen raz
cuadrada exacta
Dato de prueba:
Nmero = 293

3.3.- Iteracin

Las estructuras de iteracin se utilizan en la ejecucin repetida de un bloque de


instrucciones. En el Lenguaje C++, se tienen: Para el manejo de las estructuras de
iteracin.
3.3.1.- La instruccin while

Con esta instruccin se maneja una estructura en la que, de entrada, se evala una
condicin. En caso de que el resultado de tal evaluacin sea un valor diferente de cero ,
se ejecuta un bloque de instrucciones, en el cual debe existir una instruccin que
modifique la condicin, ya que de lo contrario ejecutar un ciclo infinito ( loop ). Si el
resultado de la evaluacin es un valor igual a cero, el bloque de instrucciones no se
ejecuta y finaliza la ejecucin de la instruccin.
La sintaxis de la instruccin while es la siguiente:
while(condicin)
bloque;

En la figura 3.4 se presenta el diagrama de la instruccin while.

31

El listado 3.4 muestra el uso de la instruccin while.


#include <iostream.h>
#define FALSO 0
int main()
{
int valor=1;
system("cls");
while(valor!=FALSO)
{
cout<<"\n Teclee un valor entero ( 0 para salir ): "; cin>>valor;
}
return 0;
}

Listado 3.4.- Uso de la instruccin while


Ejercicios
1. Elabore un programa que permita sumar todos los nmeros naturales
menores a un nmero ingresado.
Dato de prueba: Nmero = 12
#include<stdio.h>
#include<conio.h>
int main()
{
int N;
int I, S;
printf("\n INGRESE ");
printf("\n ");
printf("\n Numero limite para la suma:
"); scanf("%i",&N);
I = 1;
S = 0;
while ( I < N)
{
S = S + I; // hacemos uso de un acumulador
I = I +1;
}
printf("\n La Suma es: %i",S);
printf("\n ");
getch();
return 0;
}
2. Elabore un programa que permita sumar todos los nmeros naturales
menores a un nmero ingresado. Los nmeros sumados deben ser pares
Dato de prueba: Nmero = 40
3. Elabore un algoritmo/programa que permita contar todos los nmeros
naturales menores a un nmero ingresado. Los nmeros contados deben
ser pares
Dato de prueba: Nmero = 36
4. Elabore un algoritmo/programa que permita contar todos los nmeros
naturales que se encuentran en un rango de nmeros (incluyendo estos
numeros). Los nmeros contados deben ser pares
Dato de prueba: Rango de Nmeros = 13 a 45, es decir debe ingresar
dos nmeros (13 y 45).
32

5. Elabore un programa que permita multiplicar y sumar todos los nmeros


naturales menores a un nmero ingresado. Los nmeros considerados
deben ser multipos de tres.
Dato de prueba: Nmero = 32
6. Elabore un programa que permita sumar y multiplicar todas las cifras de
un numero entero ingresados
Dato de prueba: Nmero = 1252
7. Elabore un programa que permita sumar todas las cifras impares de un
numero entero ingresados
Dato de prueba: Nmero = 7638
8. Elabore un programa que permita sumar todas las cifras de posicin
impar y todas las cifras de posicin par (por separado), seguidamente se
debe mostrar la diferencia de estos resultados
Dato de prueba: Nmero = 27638
9. Elabore un algoritmo/programa que permita aceptar un nmero entero
en el sistema decimal y expresarlo en el sistema de numeracin, cuya
base debe ser ingresada y mayor a uno pero menor a diez

3.3.2.- La instruccin do - while

La instruccin do-while tiene un comportamiento similar a while, slo que en este caso
primero se ejecuta el bloque de instrucciones y despus se evala la condicin. Con esto
se asegura que el bloque se ejecutar al menos una vez.
Esta es la sintaxis de la instruccin do-while :
do

bloque;
while(condicin);

La instruccin do-while puede representarse con el diagrama mostrado en la figura 3.5.

33

Como una aplicacin de la instruccin do-while , se presenta en el listado 3.5 una


variante al problema resuelto en el listado 3.3 .
#include <iostream.h>
#include <conio.h>
void main()
{
char opcion;
do
{
// inicia ciclo 1
clrscr();
gotoxy(30,5);
cout << "MENU DE OPCIONES";
gotoxy(30,8); cout << "1.- CREACION";
gotoxy(30,10); cout << "2.- MODIFICACION";
gotoxy(30,12); cout << "3.- ELIMINACION";
gotoxy(30,14); cout << "0.- SALIDA";
gotoxy(30,18); cout << "SU OPCION ? ";
window(42,18,42,18);
do
{ // inicia ciclo 2 clrscr();
opcion="getche();"
}while((opcion < '0')||(opcion>'3'));// fin ciclo 2
window(1,1,80,25);
switch(opcion)
{
case '1': clrscr();
cout << "RUTINA DE CREACION\n";
break;
case '2': clrscr(); cout << "RUTINA DE MODIFICACION\n";
break;
case '3': clrscr(); cout << "RUTINA DE ELIMINACION\n";
break;
case '0': clrscr(); cout << "SALIDA DE LA APLICACIN \n";
break;
}
cout << "\n\nPULSE CUALQUIER TECLA PARA CONTINUAR.."; getch();
}while(opcion!="0" ); // fin ciclo 1 }

Listado 3.5.- Aplicacin de la instruccin do-while


Ejercicios
1. Elabore un programa que permita sumar todos los nmeros naturales
hasta un nmero ingresado.
Dato de prueba: Nmero = 41
#include <iostream.h>
int main()
{
int N;
int I, S;
cout<<"\n INGRESE ";
cout<<"\n ";
cout<<"\n Numero limite para la suma : ";cin>>N;
S = 0;
I = 1;
do
34

{
S = S + I;
I = I + 1;
}
while ( I <= N);
cout<<"\n La Suma es: "<<S;
cout<<"\n ";
system("PAUSE");
return 0;
}
2. Elabore un algoritmo/programa que permita elegir que desea determinar
el usuario con respecto a la formula
V=D/T
V : Velocidad
D : Distancia T: Tiempo
#include <iostream.h>
int main()
{
float V, D, T;
int OP;
int Resp;
do
{
cout<<"\n Que desea determinar en V = D / T ";
cout<<"\n 1. Velocidad ";
cout<<"\n 2. Distancia ";
cout<<"\n 3. Tiempo ";
cout<<"\n Opcion "; cin>>OP;
switch (OP)
{
case 1:
cout<<"\n Ingrese ";
cout<<"\n Distancia (m) "; cin>>D;
cout<<"\n Tiempo (s) < > de cero "; cin>>T;
V = D / T;
cout<<"\n La velocidad en (m/s) es: "<<V;
break;
case 2:
cout<<"\n Ingrese ";
cout<<"\n Velocidad (m/s) "; cin>>V;
cout<<"\n Tiempo en segundos "; cin>>T;
D = V* T;
cout<<"\n La distancia en metros es: "<<D;
break;
case 3:
cout<<"\n Ingrese ";
cout<<"\n Velocidad (m/s) < > de cero ";cin>>V;
cout<<"\n Distancia en metros "; cin>>D;
T = D / V;
cout<<"\n El Tiempo en segundos es: "<<T;
break;
default:
cout<<"\n Opcion Incorrecto ";
}
cout<<"\n Desea Continuar SI = 9 / NO = 0? ";cin>>Resp;
} while ( Resp == 9);
cout<<"\n ";
system("PAUSE");
35

return 0;
}
3. Elabore un programa que permita sumar y contar todos los nmeros
naturales hasta un nmero ingresado. Los nmeros considerados deben
ser mltiplos de cinco
Dato de prueba: Nmero ingresado = 80
4. Elabore un programa que permita determinar, utilizando un men de
opciones, el rea de un cuadrado, un triangulo, un crculo y un trapecio.
5. Elabore un algoritmo/programa que permita elegir que desea determinar
el usuario con respecto a la formula
T= D / (V1 - V2)
6. Elaborar un programa que acepte un nmero entero, seguidamente se
debe determinar el factorial de la mayor cifra (valor absoluto) que tiene
el nmero ingresado.
7. Elaborar un programa que acepte un nmero entero, seguidamente se
debe determinar si el numero ingresado es numero perfecto
8. Elaborar un programa que determine y muestre todos los nmeros
perfecto menores a 100.

3.3.3.- La instruccin for

Entre las instrucciones de iteracin, for es la ms verstil, ya que, entre otras


caractersticas, permite la declaracin de variables dentro de su estructura.
La sintaxis de la instruccin for es la siguiente:
for(inicializacin ; condicin ; control)
bloque;
donde:

inicializacin

es un bloque de instrucciones que puede


incluir la declaracin de las variables
involucradas y la asignacin de valores
iniciales.

condicin

es una instruccin que puede evaluarse de


tal forma que se obtenga como resultado un
valor de verdad ( falso verdadero ).
Mientras, se cumpla la condicin, se ejecutar el bloque de instrucciones.

control

es un bloque de instrucciones separadas por


comas y que controlan la variacin de los
valores de las variables utilizadas.

36

Los bloques de inicializacin, condicin y control no son obligatorios, pero s lo son los
tres punto y coma que los separan; de tal suerte que la forma mnima de una instruccin
for quedara as:
for(;;)
;

// ciclo infinito
// no realiza tarea alguna

El diagrama para la instruccin for se muestra en la figura 3.6.

El listado 3.6 muestra el uso de la instruccin for.


#include <iostream.h>
#include <conio.h>
int main()
{
clrscr();
for(int x=1 ; x <= 25 ; x++)
{ for(int y=1 ; y <=80 ; y++)
{ gotoxy(y,x);
if((x==25) && (y==80))
getch();
cout << '.';
}
}
}

return 0;

Listado 3.6.- Utilizacin de la instruccin for


Ejercicios
1. Elabore un algoritmo/programa que permita sumar todos los nmeros
naturales hasta un nmero ingresado.
Dato de prueba: Nmero = 22
#include <iostream.h>
int main()
37

{
int N;
int I, S;
cout<<"\n INGRESE ";
cout<<"\n ";
cout<<"\n Numero limite para la suma : ";cin>>N;
S = 0;
for ( I = 1; I <= N; I++)
S = S + I; // hacemos uso de un acumulador
cout<<"\n La Suma es: "<<S;
cout<<"\n ";
system("PAUSE");
return 0;
}
2. Elabore un algoritmo/programa que permita sumar todos los nmeros
naturales hasta un nmero ingresado. Los nmeros sumados deben ser
pares
Dato de prueba: Nmero = 36
3. Elabore un algoritmo/programa que permita contar todos los nmeros
naturales que se encuentran en un rango de nmeros, incluyendo el
rango. Los nmeros contados deben ser mltiplos de cinco.
Dato de prueba: Rango de Nmeros = 13 a 45, es decir debe ingresar
dos nmeros (13 y 45)
4. Elabore un algoritmo/programa que permita aceptar un nmero entero
mayor a la unidad y determinar si es primo absoluto o no.
5. Elabore un algoritmo/programa que permita generar la serie de
Fibonacci, con una cantidad de trminos igual a un nmero entero
ingresado
BREAK Y CONTINUE
Los enunciados break y continue son utilizados para modificar el flujo de
control dentro de un programa.
El break utilizado dentro de las estructuras de controlcausa la inmediata
salida de dicha estructura (por lo tanto no sigue repitindose el bloque y
contina la ejecucin de las instrucciones que le siguen a la estructura de
control).
Veamos un ejemplo del uso de break:
#include <iostream.h>
int main()
{
int num;
num = 1;
while (num <= 10)
{
if (num == 5)
{
break;
}
cout<<num <<"; ";

38

num = num + 1;
}
cout<<"\n ";
system("PAUSE");
return 0;
}
El cdigo anterior imprime:
1234
Lo que sucede es que cuando la variable num toma el valor 5, la condicin
del while se cumple, al ingresar al bloque se evala en la estructura if si
num es igual a 5 y se ejecuta el break saliendo del bloque while. Num
termina valiendo 5 pues jams se ejecuta la suma num = num + 1.
Por otra parte, el enunciado continue, dentro de las estructuras de
repeticin, al ser ejecutado salta las instrucciones que siguen en el bloque y
ejecuta la siguiente repeticin en el ciclo. Veamos un ejemplo para aclarar el
funcionamiento de continue:
#include <iostream.h>
int main()
{
int num;
num = 0;
while (num <= 7)
{
num = num + 1;
if (num == 5)
{
continue;
}
cout<<num<<"; ";
}
cout<<"\n ";
system("PAUSE");
return 0;
}

1 2 3 4 6 7- 8
Como vemos, en una de las repeticiones se saltea la impresin del nmero 5.
Algunos programadores dicen que el uso del break y del continue dentro de las
estructuras de control (excepto el break en la estructura switch) viola las normas de la
programacin estructurada. Lo cierto es que no es necesario el uso de break y continue
si se utilizan las estructuras correctas

4.- Diseo de funciones

39

Las funciones son el mdulo bsico para la construccin de programas en C++.


Adems de la funcin main(), con frecuencia es necesario utilizar funciones adicionales
que pueden ser accesadas a travs del enlace de libreras precompiladas a travs de su
definicin en el archivo de cdigo fuente en archivos de cabecera.
En esta unidad estudiaremos los procedimientos necesarios para el manejo de las
funciones definidas en el cdigo fuente.
En principio, debemos distinguir entre: declarar, definir e invocar una funcin, ya que la
confusin de stos trminos es causa de frecuentes problemas.
Desde los orgenes del Lenguaje C ha existido la distincin entre definir y declarar una
funcin. Cuando se define una funcin se le est reservando espacio de almacenamiento
en memoria; en cambio cuando se declara solo se est avisando que ms adelante se
encuentra una funcin con ciertas caractersticas, pero no se le reserva espacio en
memoria.
4.1.- Definicin de funciones

La definicin de una funcin implica reservarle espacio de almacenamiento en


memoria, de acuerdo al tipo de dato a retornar.
Es en la definicin donde se incluye el cuerpo de la funcin.
El formato general de la definicin de una funcin es el siguiente:
tipo
{
}

identificador( argumentos )
bloque;

donde:
tipo es el tipo de dato que va a retornar la funcin, e identificador es el nombre de la
funcin.
La existencia de argumentos depender de la tarea que va a realizar la funcin, pero el
par de parntesis es requisito indispensable.
En el ejemplo 4.1. se presenta una aplicacin de la definicin, la declaracin y la
invocacion de funciones.
4.2.- Declaracin de funciones

Cuando se declara una funcin, se est avisando al compilador que ms adelante


encontrar la definicion de tal funcin, y que por el momento, tome nota de las
caractersticas de ella, como son: el tipo de dato que retorna, su nombre y los tipos de
argumentos que va a recibir. Con esto, no habr ningn problema en invocar a la
funcin en un bloque de programa ubicado antes del lugar donde se encuentra escrita su

40

definicin.
En el ejemplo 4.1, las lneas:
void saludo();
float calcula(float);

representan la declaracin de las funciones la declaracin de los prototipos de las


funciones saludo() y calcula().
En la declaracin de la funcin saludo() se especifica que no va a retornar valor alguno,
y que no recibir argumentos.
En la declaracin de la funcin calcula() se especifica que va a retornar un valor de tipo
float, y que va recibir un argumento de tipo float.
Es importante observar que la declaracin de una funcin es parecida a la lnea de
encabezado de su definicin , slo que en el caso de la declaracin se escribe un punto y
coma al final.
Tambin cabe hacer notar que en la declaracin no se requiere escribir identificadores
para los argumentos, como se observa en el ejemplo 4.1, sino que basta con incluir los
tipos de datos de los argumentos. Se pueden incluir identificadores de argumentos, slo
que el mbito de tales identificadores estar restringido a la declaracin de la funcin
correspondiente.
Por lo tanto, la declaracin:
float calcula(float);

podra haberse escrito as :

float calcula(float arg);

En este caso, el identificador arg no tiene uso alguno; por lo que es innecesaria su
inclusin.
Si el nmero de argumentos, o los tipos correspondientes no coinciden entre la
declaracin y la lnea de encabezado de la definicin de la funcin el compilador
marcar un error.
4.3.- Invocacin a funciones

Una invocacin llamada a una funcin implica pasarle el control de la ejecucin del
programa, as como los argumentos parmetros que requiere para realizar su tarea. En
el listado 4.1 se tienen las lneas:
saludo();
//INVOCACION A LA FUNCION saludo()
precio = calcula(costo); //INVOCACION A LA FUNCION calcula()

En la primera, se invoca a la funcin saludo() y no se le pasa ningn argumento. En la


segunda, se invoca a la funcin calcula(), pasndosele como argumento una copia del
valor que tiene la variable costo. El valor retornado por calcula() se asigna a la variable
precio.

41

// ENCABEZADOS
#include <iostream.h>
// DECLARACION DE FUNCIONES
void saludo();
float calcula(float);
// DEFINICION DE LA FUNCION PRINCIPAL
int main()
{
float costo, precio;
system("CLS");
cout << "\n COSTO : $ "; cin>> costo;
saludo();
//INVOCACION A LA FUNCION saludo()
precio = calcula(costo); //INVOCACION A LA FUNCION calcula()
cout << "\n PRECIO : $ " << precio;
cout << "\n ";
system("PAUSE");
return 0;
}
// DEFINICION DE LA FUNCION saludo()
void saludo()
{
system("CLS");
cout << "\n !! BIENVENIDO A LA VENTA ESPECIAL !!";
}
// DEFINICION DE LA FUNCION calcula()
float calcula(float x)
{
return( x * 1.6);
}

Listado 4.1.- Diseo de funciones usando prototipo.


4.4.- El prototipo de una funcin es obligatorio?

Cuando encuentra la primera invocacin a una funcin, el compilador verifica si ya se


realiz la declaracin la definicin de la funcin invocada. En caso de no existir ni
declaracin ni definicin previa, enviar un mensaje de error diciendo que la funcin
invocada debe tener un prototipo. En ese momento se detiene la compilacin y no se
genera el archivo .OBJ correspondiente.
Lo anterior puede sugerir que el prototipo de la funcin invocada es indispensable. La
realidad es que se puede omitir el prototipo si escribimos la definicin de la funcin
antes de su primera invocacin, como se muestra en el ejemplo 4.2.
// ENCABEZADOS
#include <iostream.h>
// DEFINICION DE LA FUNCION saludo()
void saludo()
{
system("CLS");
cout << "\n !! BIENVENIDO A LA VENTA ESPECIAL !!";
}
// DEFINICION DE LA FUNCION calcula()
float calcula(float x)
{
return( x * 1.6);
}
// DEFINICION DE LA FUNCION PRINCIPAL

42

int main()
{ float costo, precio;
system("CLS");
cout << "\n COSTO : $ ";
saludo();
precio = calcula(costo);
cout << "\n PRECIO : $ "
cout << "\n ";
system("PAUSE");
return 0;
}

cin>> costo;
//INVOCACION A LA FUNCION saludo()
//INVOCACION A LA FUNCION calcula()
<< precio;

Listado 4.2.- Diseo de funciones sin uso de prototipos.


Aunque el prototipo no es obligatorio, es recomendable utilizarlo, ya que de esta manera
se permite al compilador verificar que el nmero y tipos de argumentos utilizados en la
invocacin (parmetros actuales) coinciden con los de la definicin (parmetros
formales).
La declaracin de prototipos tambin sirve para que el usuario de un programa conozca
la forma de utilizacin de la funcin, sin tener que proporcionarle el cdigo fuente.
Por ejemplo, si tenemos un programa que maneja operaciones matemticas podemos
distribuir a los usuarios el cdigo objeto que contenga las definiciones de las funciones
y un archivo de cabecera que contenga los prototipos.
4.5.- Sobrecarga de funciones

En la mayora de los casos, los identificadores nombres de los objetos deben ser
nicos, esto es, que dos objetos dentro del mismo mbito no deben tener el mismo
nombre. Una de las excepciones la constituyen las funciones, que pueden compartir el
mismo nombre entre varias de ellas, dando la impresin de que a una sola funcin se le
ha "sobrecargado de tareas", razn por la cual se les llama funciones sobrecargadas.
Por ejemplo, supongamos que deseamos una funcin que sirva para sumar nmeros. Lo
ideal sera contar con una sola funcin que realizara la suma de nmeros de diferentes
tipos y que retornara un valor de acuerdo al tipo de resultado. El Lenguaje C++ permite
resolver este problema por medio de la sobrecarga de funciones.
A continuacin se muestran los prototipos para cada una de las funciones que comparten
el nombre suma :
int

suma(int,int);

float

suma(float,float);

// Recibe enteros, devuelve entero

double suma(double,double);

Aqu surge la pregunta: cmo distingue el compilador entre cada una de las funciones
suma()?.
Debido a que varias funciones sobrecargadas pueden usar el mismo identificador, C++
utiliza el concepto de nombres ampliados para controlar cada funcin individualmente.
El nombre ampliado de una funcin se construye tomando como base el nombre de la

43

funcin y los tipos de los argumentos. El tipo de retorno de la funcin no se utiliza en la


formacin del nombre ampliado. La composicin del nombre ampliado ocurre a nivel
del compilador, no al nivel del enlazador. El enlazador resuelve fcilmente las
referencias externas para sobrecargar las funciones debido a que stas tienen nombres
ampliados nicos.
Ejercicios
1. Elabore un programa que permita utilizar una funcin que determine la
suma de dos nmeros enteros.
Dato de prueba:
Primer numero = 12; Segundo numero = 10
#include <iostream.h>
//funcin que permite sumar dos nmeros enteros
int suma(int a, int b)
{
int s;
s = a + b;
return s;
}
// fin de la funcin
int main()
{
int A, B;
int S;
cout<<"\n INGRESE ";
cout<<"\n ";
cout<<"\n Primer numero : ";cin>>A;
cout<<"\n Segundo numero : ";cin>>B;
S= suma(A, B); //Se invoca a la funcion
cout<<"\n RESULTADO ";
cout<<"\n ";
cout<<"\n La suma es : "<<S;
cout<<"\n ";
system("PAUSE");
return 0;
}
2. Elabore un programa que permita utilizar una funcin que determine la
suma, resta, multiplicacin y divisin de dos nmeros enteros (no utilizar
una funcin para cada operacin).
Dato de prueba:
Primer numero = 12 Segundo numero = 10
3. Elabore un programa que permita utilizar una funcin que determine el
rea de: un tringulo (b*h/2), un cuadrado (l*l) y un circulo (3.1415*r*r),
Utilizar una funcin para cada rea a determinar.
Dato de prueba: base = 4; altura = 6;
lado = 5;
radio = 3
4. Elabore un programa que permita utilizar una funcin para determinar el
mximo comn divisor de dos nmeros enteros.
Dato de prueba:
Primer numero = 12 Segundo numero = 10
Primera forma

44

#include <iostream.h>
int mcd(int a , int b)
{
int r; //usaremos el r como residuo
a = (a < 0) ? -a:a; //le damos el intervalo a
b = (b < 0) ? -b:b; //le damos el intervalo b
r = (a < b) ? a:b; //le damos el intervalo desde a hasta b
while ( (a % r) || (b % r)) //Usamos el "o"
--r; //Decremento "--"
return r;
}
int main()
{
int A, B;
float D;
cout<<"\n INGRESE ";
cout<<"\n ";
cout<<"\n Primer numero : ";cin>>A;
cout<<"\n Segundo numero : ";cin>>B;
D= mcd(A, B); //Se invoca a la funcion
cout<<"\n RESULTADO ";
cout<<"\n ";
cout<<"\n El maximo comun divisor (MCD) es: "<<D;
cout<<"\n ";
system("PAUSE");
return 0;
}
Segunda forma
#include <iostream.h>
int mcd(int a , int b)
{
int r; //usaremos el r como residuo
do
{
r=a%b;
a=b;
b=r;
}while (b!=0);
return a;
}
int main()
{
int A, B, X;
float D;
cout<<"\n
cout<<"\n
cout<<"\n
cout<<"\n
if (A<B)
{
X=A;

INGRESE ";
";
Primer numero : ";cin>>A;
Segundo numero : ";cin>>B;

45

A=B;
B=X;
}
D= mcd(A, B); //Se invoca a la funcion
cout<<"\n RESULTADO ";
cout<<"\n ";
cout<<"\n El maximo comun divisor (MCD) es: "<<D;
cout<<"\n ";
system("PAUSE");
return 0;
}
5. Elabore un programa que permita utilizar una sola funcin para
determinar la suma, resta y multiplicacin de dos nmeros enteros.
Dato de prueba:
Primer numero = 20 Segundo numero = 40

5.- Arreglos.
Los arreglos consisten de un conjunto de elementos del mismo tipo almacenados en
localidades contguas de memoria. Los elementos de un arreglo comparten el mismo
nombre, pudindo distinguirse un elemento de otro a travs de un subndice.
En esta unidad, describiremos la declaracin de los arreglos, el manejo de los elementos
de un arreglo dado, as como lo relacionado con los arreglos que se utilizan para formar
las cadenas de caracteres.
5.1.- Declaracin de arreglos

Los elementos de los arreglos son variables de algn tipo dado, que al compartir el
mismo nombre pueden ser tratadas como una sola entidad.
La sintaxis para la declaracin de un arreglo es la siguiente:
tipo

identificador

[ <expresin_constante> ] ;

tipo

es el tipo de los elementos que componen el arreglo

donde:

identificador es el nombre del arreglo

46

expresin_constante es una expresin que al reducirse debe


dar como resultado un valor
entero positivo.

En el ejemplo 5.1 se muestra la declaracin de arreglos.


DECLARACION
char nombre[31];
int valor[20];
unsigned long abc[x]

double matriz[5][7];
int trid[3][5][8];

RESULTADO
Declara un arreglo unidimensional llamado
nombre compuesto de 31 elementos de tipo
carcter.
Declara un arreglo unidimensional llamado
valor, compuesto por 20 elementos de tipo
entero con signo.
Declara un arreglo unidimensional llamado
abc, compuesto por x elementos de tipo
entero largo sin signo. En este caso x
debe ser una constante entera.
Declara un arreglo bidimensional llamado
matriz, compuesto por 35 elementos de
tipo entero.
Declara un arreglo tridimensional llamado
trid, compuesto por 120 elementos de tipo
entero.

Ejemplo 5.1.- Declaraciones de arreglos.


Como se observa en el ejemplo 5.1, la declaracin de un arreglo multidimensional se
distingue en que se agrega una pareja de corchetes para cada dimensin, por lo que la
sintaxis, en este caso, toma la siguiente forma:
tipo identificador [ cte1 ][ cte2 ][ cte3 ] ... ;
donde: cte1, cte2, etc. representan los subndices para cada
dimensin.

El nmero y tamao de las dimensiones solo estar restringido por la disponibilidad de


memoria RAM, por lo que se puede tener una declaracin como la siguiente:
double multidim [5][5][5][5][5][5] ;

El espacio de memoria ocupado por el arreglo multidim es el mismo que el ocupado


por:
double unidim [15625]

5.2.- Manejo de arreglos

En la seccin anterior se ha tratado lo relacionado con la declaracin de arreglos con


elementos de diferentes tipos y con una o varias dimensiones. En esta seccin se tratar
lo relativo al acceso a los elementos individuales de un arreglo, ya sea para asignarles
valores especficos o para utilizar los valores almacenados.
5.2.1.- Asignacin de valores a los elementos de un arreglo

47

Al declarar un arreglo dentro de una funcin, los valores almacenados en cada uno de
los elementos son desconocidos (se dice que el arreglo "tiene basura"), lo cual causa que
el programa correspondiente arroje resultados inesperados. Para evitar los valores
desconocidos, se recomienda asignar valores iniciales a cada uno de los elementos de
los arreglos, como se muestra a continuacin:
Por ejemplo, supongamos la siguiente declaracin:
int vector[5];

En este caso, se declara un arreglo de 5 variables de tipo entero agrupadas con el


nombre vector, las cuales pueden representarse con la figura 5.1.

Figura 5.1.- Representacin de un arreglo


Como puede observarse en la figura 5.1, el primer subndice tiene valor cero y el ltimo
tiene valor cuatro.
Lo anterior se debe a que, en C++, el primer subndice siempre vale cero y el ltimo
tiene un valor menor en uno que el valor de la dimensin del arreglo.
Una vez declarado el arreglo, se pueden asignar valores a cada uno de sus elementos,
como se muestra enseguida:
vector[0]
vector[1]
vector[2]
vector[3]
vector[4]

=
=
=
=
=

100
101
102
103
104

;
;
;
;
;

y el arreglo vector lucira como en la figura 5.2.

Figura 5.2.- El arreglo vector despus de asignarle valores.


En este caso particular, pudimos haber asignado los valores por medio de un estatuto for
de la siguiente forma:
for( int x = 0 ; x < 5 ; x++)
vector[x] = x + 100 ;

48

Esta forma es la ms conveniente en caso de que la cantidad de elementos sea grande y


que los valores a asignar sean iguales o las diferencia entre elementos consecutivos sea
constante.
Todo lo escrito en este ejemplo es vlido para arreglos con elementos de cualquier tipo.
Por ejemplo, si queremos desplegar en pantalla los caracteres del cdigo ASCII lo
haramos por medio del siguiente grupo de instrucciones:
unsigned char caracter[256];
for( int x=0 ; x < 256 ; x++ )
printf("%c", caracter[x]) ;

Ejercicios
1. Elabore un programa que permita aceptar 10 nmeros enteros y
seguidamente se deben mostrar estos nmeros ingresados.
Dato de prueba:
34, 56, 32, 54, 67, 21, 89, 47, 91, 13
#include <iostream.h>
int main()
{
int NUM[10];
int I;
cout<<"\n INGRESE 10 NUMEROS ENTEROS ";
cout<<"\n ";
for ( I=1; I<=10;I++)
cin>>NUM[I];
cout<<"\n LOS NUMEROS INGRESADOS SON: ";
cout<<"\n ";
for ( I=1; I<=10;I++)
cout<<NUM[I]<<" ";
cout<<"\n ";
system("PAUSE");
return 0;
}
2. Elabore un programa que permita aceptar 10 nmeros enteros y
seguidamente se deben mostrar estos nmeros ingresados ordenados en
forma ascendente.
Datos de prueba:
34, 56, 32, 54, 67, 21, 89, 47, 91, 13
#include <iostream.h>
int main()
{
int NUM[10];
int I, J, AUX;
cout<<"\n INGRESE 10 NUMEROS ENTEROS ";
cout<<"\n ";
for ( I=1; I<=10;I++)
cin>>NUM[I];
cout<<"\n ";
// haciendo uso del metodo de la burbuja
for ( I=1; I<=9;I++)
for ( J=I + 1; J<=10;J++)
if (NUM[J] < NUM[I])

49

AUX = NUM[I];
NUM[I]= NUM[J];
NUM[J]= AUX;

cout<<"\n numeros ordenados en forma ascendente ";


cout<<"\n ";
for ( I=1; I<=10;I++)
cout<<NUM[I]<< " ";
cout<<"\n ";
system("PAUSE");
return 0;

3. Elabore un algoritmo/programa que permita aceptar 10 nmeros enteros


y seguidamente se deben mostrar la suma de estos de nmeros y su
promedio.
Dato de prueba:
34, 56, 32, 54, 67, 21, 89, 47, 91, 13
4. Elabore un algoritmo/programa que permita aceptar 10 nmeros enteros
y seguidamente se deben mostrar el nmero menor y el nmero mayor.
Datos de prueba:
34, 56, 32, 54, 67, 21, 89, 47, 91, 13
5. Elabore un algoritmo/programa que permita aceptar 10 nmeros enteros
y seguidamente se deben mostrar la suma de de las cifras del mayor de
los nmeros ingresados.
Dato de prueba:
342, 356, 632, 154, 687, 221, 189, 647, 891, 913
6. Elabore un algoritmo/programa que permita aceptar 10 nmeros enteros,
seguidamente se deben mostrar la divisin del mayor entre el menor de
los nmeros ingresados.(PUEDE INGRESARSE EL NUMERO CERO UNA O
VARIAS VECES . SI SE DA ESTE CASO LA DIVISION DEBE SER CON EL
SIGUIENTE MENOR NUMERO DIFERENTE DE CERO.)
Dato de prueba:
2, 0, 6, 154, 0, 21, 18, 7, 81, 13
7. Elabore un algoritmo/programa que permita aceptar 10 nmeros enteros
y seguidamente se deben mostrar la cantidad de valores que son
mayores al promedio de todos los numeros.
Dato de prueba:
342, 356, 632, 154, 687, 221, 189, 647, 891, 913
8. Elabore un algoritmo/programa que permita aceptar 10 nmeros enteros
y seguidamente se debe crear dos arreglos ms, el primero debe
contener todos los nmeros que se han ingresado pero que son primos
absolutos y en el segundo arreglo el resto de los nmeros ingresados. Se
debe mostrar el contenido de estos dos arreglos
Dato de prueba:
31, 43, 63, 54, 87, 21, 19, 47, 91, 13

Arreglo con dos dimensiones.


Cuando se manejan arreglos de varias dimensiones, debe recordarse que el subndice de
cada una de ellas inicia con un valor 0, como se observa en el listado 5.1.
#include <iostream.h>
#include <conio.h>
void main(void)
{
int matriz[3][4];
clrscr();

50

for(int x=0 ; x < 3 x++)


{
for(int y=0; y< 4 ; y++)
{
matriz[x][y]=x+y+1 ;
gotoxy(y+1,x+1);
cout<< matriz[x][y];
}
cout<<"\n";
}
getch();
}

Listado 5.1.- Arreglo con dos dimensiones.


El resultado de ejecutar el programa del listado 5.1 es el siguiente:
1234
2345
3456

El arreglo matriz puede representarse con la figura 5.3 .

Figura 5.3.- Representacin del arreglo matriz .


Obsrvese que el primer subndice vara de 0 a 2 y el segundo vara de 0 a 3.
En los prrafos anteriores, se ha mostrado la forma de asignar valores a cada uno de los
elementos de un arreglo una vez que se ha escrito su declaracin. Aqu veremos la

51

manera de asignarle valores iniciales a los elementos, en la misma instruccin que


contiene la declaracin del arreglo.
Por ejemplo, para declarar un arreglo de 10 enteros y al mismo tiempo asignarle a cada
uno de sus elementos los valores 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, puede escribirse:
int digitos[] = { 0,1,2,3,4,5,6,7,8,9 };
En este caso, aunque no se escribe el tamao de la dimensin del arreglo digitos, tiene el
mismo efecto que escribir:
int digitos[10];
digitos[0]
digitos[1]
digitos[2]
digitos[3]
digitos[4]
digitos[5]
digitos[6]
digitos[7]
digitos[8]
digitos[9]

=
=
=
=
=
=
=
=
=
=

0
1
2
3
4
5
6
7
8
9

;
;
;
;
;
;
;
;
;
;

Como puede verse, la primera forma es mucho ms compacta, aunque, como en muchas
de las instrucciones de C++, la brevedad del cdigo sacrifica la claridad.
Ejercicios
1. Elabore un programa que permita aceptar 6 nmeros enteros y
seguidamente se deben mostrar estos nmeros ingresados.
Dato de prueba:
columna1
columna2 columna3
Fila 1
14
35
46
Fila 2
25
18
49
#include <iostream.h>
int main()
{
int NUM[2][3];
int I, J;
for ( I=1; I<=2; I++)
{
cout<<"\n INGRESE 3 NUM. ENTEROS DE LA FILA "<<I<<"\n ";
for ( J=1; J<=3;J++)
cin>>NUM[I][J];
}
cout<<"\n LOS NUMEROS INGRESADOS SON: ";
cout<<"\n ";
for ( I=1; I<=2; I++)
{
for ( J=1; J<=3;J++)
cout<<NUM[I][J] <<" ";
cout<<"\n ";
52

}
cout<<"\n ";
system("PAUSE");
return 0;

}
2. Elabore un programa que permita aceptar 6 nmeros enteros y
seguidamente se deben mostrar la suma y promedio de estos nmeros
ingresados.
Dato de prueba:
columna1
columna2 columna3
Fila 1
14
35
46
Fila 2
25
18
49
3. Elabore un programa que permita aceptar 12 nmeros enteros y
seguidamente se debe mostrar la suma de los valores de cada una de
sus filas (por separado).
Dato de prueba:
columna1
columna2 columna3 columna 4
Fila 1
14
35
46
32
Fila 2
25
18
49
43
Fila 3
51
34
12
65

5.3.- Cadenas de caracteres

En C++ no existe un tipo predefinido para el manejo de cadenas de caracteres como en


otros lenguajes, sino que tienen que declararse como arreglos de caracteres.
Lo que distingue a una cadena de caracteres, con respecto a un arreglo de caracteres
cualquiera, es que la cadena de caracteres tiene como ltimo carcter al carcter nulo \0.
Por ejemplo, si se declara el arreglo:
char cadena[8];

Podemos asignar los siguientes valores a cada uno de sus elementos:


cadena[0]
cadena[1]
cadena[2]
cadena[3]
cadena[4]
cadena[5]
cadena[6]
cadena[7]

=
=
=
=
=
=
=
=

'A' ;
'R' ;
'R' ;
'E' ;
'G' ;
'L' ;
'O' ;
'\0';

Al contener el carcter nulo, el arreglo cadena ser reconocido por las funciones y
objetos diseados para manipular cadenas de caracteres. Para manejar un arreglo de
cadenas de caracteres se debe declarar como un arreglo bidimensional de elementos de
tipo char, como puede observarse en el listado 5.2.

53

#include <iostream.h>
#include <conio.h>
int main()
{
unsigned short int calif[10];
char nombre[10][21]; // Se declara un arreglo bidimensional
// para 10 nombres de 20 caracteres por
// nombre mas un caracter para el nulo.
clrscr();
for( int x=1 ; x <= 10 ; x++)
{
gotoxy(10,x+1);
cout << "NOMBRE [" << x << "] = " ;
cin >> nombre[x];
gotoxy(45,x+1);
cout << "CALIFICACION [" << x << "] = " ;
cin >> calif[x];
}
return 0;
}

Listado 5.2.- Manejo de un arreglo de cadenas de caracteres.


En el listado 5.2, se inicia con el subndice 0 para no desperdiciar el primer elemento del
arreglo. Adems, se debe recordar que el subndice del ltimo elemento del arreglo es
igual al tamao de la dimensin menos 1.
5.4.- Asignacin de Valores Iniciales a Cadenas

Cuando se tiene un arreglo de cadenas de caracteres, se puede utilizar la forma


compacta mostrada en la seccin anterior, slo que , en lugar de constantes numricas
manejaramos constantes de cadena.
Por Ejemplo:
char nombres[][5] = { "HUGO", "PACO", "LUIS" } ;
es equivalente a:
char nombres[3][5];
nombres[0] = "HUGO" ;
nombres[1] = "PACO" ;
nombres[2] = "LUIS" ;

Esto tambin puede manejarse a nivel de caracteres, as:


char nombres[][5] = { 'H','U','G','O','\0',
'P','A','C','O','\0',
'L','U','I','S','\0' };

o as:

54

char nombres[3][5];
nombres[0][0]
nombres[0][1]
nombres[0][2]
nombres[0][3]
nombres[0][4]
nombres[1][0]
nombres[1][1]
nombres[1][2]
nombres[1][3]
nombres[1][4]

=
=
=
=
=
=
=
=
=
=

'H' ;
'U' ;
'G' ;
'O' ;
'\0' ;
'P' ;
'A' ;
'C' ;
'O' ;
'\0' ;

nombres[2][0]
nombres[2][1]
nombres[2][2]
nombres[2][3]
nombres[2][4]

=
=
=
=
=

'L' ;
'U' ;
'I' ;
'S' ;
'\0' ;

En los listados 5.3 y 5.4 se muestran las dos primeras formas, observndose que se
obtiene el mismo resultado.
#include <iostream.h>
#include <conio.h>
void main()
{
char nombres[][5] = { "HUGO","PACO","LUIS" };
int calif[] = { 100, 90, 100 };
clrscr();
for( int x=0 ; x < 3;x++)
{
gotoxy(35,x+10);
cout<< nombres[x];
gotoxy(40,x+10);
cout << calif[x];
}
}

Listado 5.3.- Manejo de arreglos de cadenas.


#include <iostream.h>
#include <conio.h>
void main()
{
char nombres[][5] = { 'H','U','G','O','\0',
'P','A','C','O','\0',
'L','U','I','S','\0' };
int calif[] = { 100, 90, 100 };
clrscr();
for( int x=0 ; x< 3;x++)
{
gotoxy(35,x+10);
cout<< nombres[x];
gotoxy(40,x+10);
cout << calif[x];
}

55

Listado 5.4.- Manejo de arreglos bidimensionales de caracteres.


En los listados 5.3 y 5.4, se muestra que no es necesario escribir el valor de la primera
dimensin de los arreglos cuando, en su declaracin, se asignan valores constantes a los
elementos.
La ventaja que tiene la forma mostrada en 5.3 y 5.4 es que, al no especificar una de las
dimensiones, la cantidad de cadenas a manejar puede variarse con slo agregarlas a la
lista o eliminarlas de ella.
5.5.- Funciones para el manejo de cadenas

Como se estableci al principio de esta unidad, el lenguaje C++ no cuenta con algn
tipo de dato especfico para el manejo de cadenas de caracteres, pero s cuenta con un
grupo de funciones que se han acumulado durante la evolucin del Lenguaje C.
Para leer una cadena de caracteres desde el teclado existe la funcin gets(), y para
desplegar una cadena en pantalla se usa la funcin puts(). Los prototipos de ambas
funciones se encuentran declarados en el archivo STDIO.H.
Por ejemplo, el listado 5.5 muestra un programa que sirve para leer y desplegar cadenas
de caracteres utilizando las funciones gets() y puts().
#include <stdio.h>
#include <conio.h>
#include <string.h>

// Para gets() y puts()


// Para clrscr() y gotoxy()
// Para strupr() y strlen()

void main()
{
char nombre[31];
// Declara un arreglo de 31 caracteres
char saludo1[] = "?? HOLA,"; //Constante de caracteres
char saludo2[] = " !!";
clrscr();
gotoxy(20,10);
puts(" Cul es tu nombre ? "); //Despliega cadena de car.
gotoxy(45,10);
gets(nombre);
// Lee cadena de caracteres
strupr(nombre); // Convierte a maysculas
gotoxy(20,12);
puts(saludo1);
gotoxy(30,12);
puts(nombre);
gotoxy(30+strlen(nombre),12); // Longitud de la cadena
puts(saludo2);
}

Listado 5.5.- Lectura y desplegado de cadenas de caracteres.


Adems de las funciones gets() y puts(), existe otro grupo de funciones para el manejo
de cadenas de caracteres, como strlen() y strupr() utilizadas en el programa del listado
5.5. Los prototipos de estas funciones se encuentran declarados en el archivo
STRING.H En la tabla 5.1 se describen brevemente algunas de las funciones para el

56

manejo de cadenas de caracteres en el C++ de Borland, cuyos prototipos se encuentran


declarados en el archivo STRING.H .
FUNCION

DESCRIPCION

stpcpy

Copia una cadena de caracteres en otra.Se detiene cuando encuentra el


terminador nulo.

strcat

Aade una cadena de caracteres a otra.

strchr

Busca, en una cadena, un caracter dado.

strcmp

Compara dos cadenas.

strcmpi

Macro que compara dos cadenas sin distinguir entre maysculas y


minsculas.

strcpy

Copia una cadena.

strcspn

Busca segmentos que no contienen un subconjunto de un conjunto


especificado de caracteres.

strdup

Copia una cadena a una nueva localidad.

_strerror Genera un mensaje de error definido por el programador.


strerror

Retorna el apuntador al mensaje asociado con el valor del error.

stricmp

Compara dos cadenas sin diferenciar entre maysculas y minsculas

strlen

Determina la longitud de una cadena.

strlwr

Convierte las maysculas de una cadena en minsculas.

strncat

Aade el contenido de una cadena al final de otra.

strncmp Compara parte de una cadena con parte de otra.


strncmpi

Compara parte de una cadena con parte de otra, sin distinguir entre
maysculas y minsculas.

strncpy

Copia un un nmero de bytes dados, desde una cadena hacia otra.

strnicmp

Compara parte de una cadena con parte de otra, sin distinguir entre
maysculas y minsculas.

strnset

Hace que un grupo de elementos de una cadena tengan un valor dado.

strpbrk

Busca la primera aparicin, en una cadena, de cualquier caracter de un


conjunto dado.

strrchr

Busca la ltima aparicin de un caracter en una cadena.

strrev

Invierte el orden de los caracteres de una cadena.

strset

Hace que los elementos de una cadena tengan un valor dado.

strspn

Busca en una cadena el primer segmento que es un subconjunto de un


conjunto de caracteres dado.

strstr

Busca en una cadena la aparicin de una subcadena dada.

_strtime Convierte la hora actual a una cadena.


strtod

Convierte una cadena a un valor double long double.

strtol

Convierte una cadena a un valor long.

strtoul

Convierte una cadena a un valor unsigned long.

57

strupr

Convierte las minsculas de una cadena a maysculas.

Tabla 5.1.- Funciones para el manejo de cadenas de caracteres.

Ejercicio 6 de IF
#include <iostream.h>
int main()
{
float N;
int NE;
cout<< "\n INGRESE UN NUMERO : " ; cin>>N;
NE = int(N);
if (N-NE==0)
cout<< "\n NUMERO INGRESADO ES ENTERO ";
cout<< "\n";
system("PAUSE");
return 0 ;
}
Ejercicio 7 de IF
#include <iostream.h>
int main()
{
int N;
cout<< "\n INGRESE UN NUMERO : " ; cin>>N;
if (N>0 && N%2==0)
cout<< "\n NUMERO INGRESADO ES PAR ";
cout<< "\n";
system("PAUSE");
return 0 ;
}
Ejercicio 8 de IF
#include <iostream.h>
int main()
{
float N;
int NE, H, M, S;
cout<< "\n INGRESE UN NUMERO : " ; cin>>N;
NE = int(N);
if (N-NE==0 && N>0)
{
H=NE/3600;
M=(NE%3600)/60;

58

S=(NE%3600)%60;
cout<<H<<" HORA(S) "<<M<<" MINUTO(S) "<<S<<"
SEGUNDO(S)";
}
cout<< "\n";
system("PAUSE");
return 0 ;
}
Ejercicio 2 de IF- ELSE
#include <iostream.h>
int main()
{
int N, M;
cout<< "\n INGRESE " ;
cout<< "\n PRIMER NUMERO " ; cin>>N;
cout<< "\n SEGUNDO NUMERO DIFERENTE AL PRIMERO " ; cin>>M;
if (N!=M)
if (N>M)
cout<<"\n MAYOR NUMERO ES : "<<N;
else
cout<<"\n MAYOR NUMERO ES : "<<M;
else
cout<<"\n INGRESE NUMEROS DIFERENTES";
cout<< "\n";
system("PAUSE");
return 0 ;
}
Ejercicio 3 de IF- ELSE
#include <iostream.h>
int main()
{
int N;
int a, b, S, M;
cout<< "\n INGRESE " ;
cout<< "\n NUMERO ENTERO DE DOS CIFRAS " ; cin>>N;
if (N>=10 && N<=99)
{
a=N/10;
b=N%10;
if (a%2==0 && b%2==0)
{
S= a+b;
cout<<"\n LA SUMA DE LAS CIFRAS ES : "<<S;
}
if (a%2!=0 && b%2!=0)
{
M= a*b;
cout<<"\n EL PRODUCTO DE LAS CIFRAS ES : "<<M;
}

59

}
else
cout<<"\n INGRESE UN NUMERO DE DOS CIFRAS";
cout<< "\n";
system("PAUSE");
return 0 ;
}
Ejercicio 5 de IF- ELSE
#include <iostream.h>
int main()
{
int N;
cout<< "\n INGRESE " ;
cout<< "\n NUMERO ENTERO MENOR A 31524 : " ; cin>>N;
if (N>=0 && N<10)
cout<<"\n EL NUMERO TIENE UNA CIFRA ";
else if (N<100)
cout<<"\n EL NUMERO TIENE DOS CIFRAS ";
else if (N<1000)
cout<<"\n EL NUMERO TIENE TRES CIFRAS ";
else if (N<10000)
cout<<"\n EL NUMERO TIENE CUATRO CIFRAS ";
else if (N<31524)
cout<<"\n EL NUMERO TIENE CINCO CIFRAS ";
cout<< "\n";
system("PAUSE");
return 0 ;
}
Ejercicio 6 de IF- ELSE
#include <iostream.h>
int main()
{
int N;
int a, b, NC;
cout<< "\n INGRESE " ;
cout<< "\n NUMERO ENTERO DE DOS CIFRAS " ; cin>>N;
if (N>=10 && N<=99)
{
a=N/10;
b=N%10;
NC= a+b*10;
cout<<"\n EL NUMERO CON LAS CIFRAS CAMBIADAS ES : "<<NC;
}
else
cout<<"\n INGRESE UN NUMERO DE DOS CIFRAS";
cout<< "\n";
system("PAUSE");
return 0 ;
}

60

Ejercicio 7 de IF- ELSE


#include <iostream.h>
int main()
{
char COD[5], NOM[10];
int SB, AI, NH;// SUELDO BASICO, AO DE INGRESO, NUMERO DE
HIJOS
int AS, BA, BH, SBRUTO;
float DES, SNETO;
cout<< "\n INGRESE DATOS DEL TRABAJADOR " ;
cout<< "\n CODIGO: " ; cin>>COD;
cout<< "\n NOMBRE: " ; cin>>NOM;
cout<< "\n SUELDO BASICO: " ; cin>>SB;
cout<< "\n AO DE INGRESO: " ; cin>>AI;
cout<< "\n NUMERO DE HIJOS: " ; cin>>NH;
AS= 2012-AI;
if (AS>8)
BA=10*AS;
else
BA=4*AS;
if (NH<4)
BH=8*NH;
else
BH=20;
SBRUTO=SB + BA + BH;
if (SBRUTO>1500)
DES=0.015*SBRUTO;
else
DES=0.005*SBRUTO;
SNETO=static_cast<float>(SBRUTO) - DES;
cout<<"\n ";
cout<<"\n RESULTADOS";
cout<< "\n";
cout<< "\n BONIFICACION POR AOS DE SERVICIO: "<<BA;
cout<< "\n BONIFICACION POR HIJOS: "<<BH;
cout<< "\n SUELDO BRUTO: "<<SBRUTO;
cout<< "\n DESCUENTO: "<<DES;
cout<< "\n SUELDO NETO: "<<SNETO;
cout<< "\n";
system("PAUSE");
return 0 ;
}
Ejercicio 8 de IF- ELSE
#include <iostream.h>
int main()
{
int N;
cout<< "\n INGRESE " ;
cout<< "\n NUMERO ENTERO : " ; cin>>N;

61

if (N<0 )
cout<<"\n EL NUMERO ES NEGATIVO ";
else if (N==0)
cout<<"\n EL NUMERO ES IGUAL A CERO ";
else
cout<<"\n EL NUMERO ES POSITIVO ";
cout<< "\n";
system("PAUSE");
return 0 ;
}

Ejercicio 9 de IF- ELSE


#include <iostream.h>
int main()
{
int A, B, C;
int M, N;
cout<< "\n INGRESE TRES NUMEROS DIFERENTES" ;
cout<< "\n PRIMER NUMERO : " ; cin>>A;
cout<< "\n SEGUNDO NUMERO : " ; cin>>B;
cout<< "\n TERCER NUMERO : " ; cin>>C;
if (A>B && A>C )
{
M=A;
if (B>C)
N=C;
else
N=B;
}
else if (B>A && B>C)
{
M=B;
if (A>C)
N=C;
else
N=A;
}
else
{
M=C;
if (A>B)
N=B;
else
N=A;
}
cout<<"\n EL MAYOR NUMERO INGRESADO ES : "<<M;
cout<<"\n EL MENOR NUMERO INGRESADO ES : "<<N;
cout<< "\n";
system("PAUSE");

62

return 0 ;
}
Ejercicio 9A de IF- ELSE
#include <iostream.h>
int main()
{
int A, B, C;
int M, N;
cout<< "\n INGRESE TRES NUMEROS DIFERENTES" ;
cout<< "\n PRIMER NUMERO : " ; cin>>A;
cout<< "\n SEGUNDO NUMERO : " ; cin>>B;
cout<< "\n TERCER NUMERO : " ; cin>>C;
if (A>B && A>C )
M=A;
else if (B>A && B>C )
M=B;
else
M=C;
if (A<B && A<C )
N=A;
else if (B<A && B<C )
N=B;
else
N=C;
cout<<"\n EL MAYOR NUMERO INGRESADO ES : "<<M;
cout<<"\n EL MENOR NUMERO INGRESADO ES : "<<N;
cout<< "\n";
system("PAUSE");
return 0 ;
}
Ejercicio switch01
#include<iostream.h>
int main()
{
int N;
cout<<"\n INGRESE ";
cout<<"\n ";
cout<<"\n Numero desde 1 hasta 7 : "; cin>>N;
switch (N)
{
case 1:
cout<<"\n Lunes ";
break;
case 2:
cout<<"\n Martes ";
break;
case 3:
cout<<"\n Miercoles ";
break;
case 4:

63

cout<<"\n Jueves ";


break;
case 5:
cout<<"\n Viernes ";
break;
case 6:
cout<<"\n Sabado ";
break;
case 7:
cout<<"\n Domingo ";
break;
default:
cout<<"\n No existe el dia ";
}
cout<<"\n ";
system("PAUSE");
return 0;
}
Ejercicio switch02
#include<iostream.h>
int main()
{
int N;
cout<<"\n INGRESE ";
cout<<"\n ";
cout<<"\n Numero desde 1 hasta 12 : "; cin>>N;
switch (N)
{
case 1:
case 2:
case 3:
cout<<"\n VERANO ";
break;
case 4:
case 5:
case 6:
cout<<"\n OTOO ";
break;
case 7:
case 8:
case 9:
cout<<"\n INVIERNO ";
break;
case 10:
case 11:
case 12:
cout<<"\n PRIMAVERA ";
break;
default:
cout<<"\n No existe el MES para el numero ingresado ";

64

}
cout<<"\n \n \n ";
system("PAUSE");
return 0;
}
Ejercicio switch03
#include<iostream.h>
int main()
{
int A, B;
char OP;
float RESULTADO;
cout<<"\n INGRESE ";
cout<<"\n ";
cout<<"\n PRIMER NUMERO : "; cin>>A;
cout<<"\n SEGUNDO NUMERO : "; cin>>B;
cout<<"\n OPERADOR (+ , - , * , / ) : "; cin>>OP;
switch (OP)
{
case '+':
RESULTADO= A+B;
cout<<"\n LA SUMA ES: "<<RESULTADO;
break;
case '-':
RESULTADO= A-B;
cout<<"\n LA RESTA ES: "<<RESULTADO;
break;
case '*':
RESULTADO= A*B;
cout<<"\n LA MULTIPLICACION ES: "<<RESULTADO;
break;
case '/':
if (A!=0 && B!=0)
{
RESULTADO= static_cast<float>(A)/static_cast<float>(B);
cout<<"\n EL COCIENTE ES: "<<RESULTADO;
}
else cout<<"\n no se puede dividir entre cero ";
break;
default:
cout<<"\n No existe el MES para el numero ingresado ";
}
cout<<"\n \n \n ";
system("PAUSE");
return 0;
}

Ejercicio switch04

65

#include<iostream.h>
int main()
{
int SW=1;
int SB;
char CAT;
float DES, BON, PAGO;
cout<<"\n INGRESE ";
cout<<"\n ";
cout<<"\n SUELDO BASICO : "; cin>>SB;
cout<<"\n CATEGORIA (A , B , C ) : "; cin>>CAT;
switch (CAT)
{
case 'A':
DES= SB*0.03;
PAGO= SB-DES;
break;
case 'B':
BON= SB*0.01;
PAGO= SB+BON;
break;
case 'C':
BON= SB*0.02;
PAGO= SB+BON;
break;
default:
cout<<"\n No existe la categoria ";
SW=0;
}
if (SW==1)
cout<<"\n PAGO : "<<PAGO;
cout<<"\n \n \n ";
system("PAUSE");
return 0;
}

Ejercicio switch05
#include<iostream.h>
int main()
{
int SWU,SWD,SWC=1;
int N;
int U, D, C;
cout<<"\n INGRESE ";
cout<<"\n ";
cout<<"\n NUMERO ENTERO DE TRES CIFRAS : "; cin>>N;

66

if (N>99 && N<1000)


{
C= N/100;
D= (N%100)/10;
U= (N%100)%10;
switch(U)
{
case 0:
case 1:
case 4:
case 9:
cout<<"\n LA CIFRAS: "<<U<<" TIENE RAIZ CUADRADA
EXACTA";
break;
default:
SWU=0;
}
switch(D)
{
case 0:
case 1:
case 4:
case 9:
cout<<"\n LA CIFRAS: "<<D<<" TIENE RAIZ CUADRADA
EXACTA";
break;
default:
SWD=0;
}
switch(C)
{
case 0:
case 1:
case 4:
case 9:
cout<<"\n LA CIFRAS: "<<C<<" TIENE RAIZ CUADRADA
EXACTA";
break;
default:
SWC=0;
}
}
else
cout<<"\n EL NUMERO DEBE SER DE TRES CIFRAS";
if (SWU==0 && SWD==0 && SWC==0)
cout<<"\n LA CIFRAS DEL NUMERO NO TIENEN RAIZ CUADRADA
EXACTA";
cout<<"\n \n \n ";
system("PAUSE");
return 0;
}

67

Ejercicio WHILE02
#include <iostream.h>
int main()
{
int N;
int I, S;
cout<<"\n INGRESE ";
cout<<"\n ";
cout<<"\n Numero limite para la suma: "; cin>>N;
I = 2;
S = 0;
while ( I < N)
{
S = S + I; // hacemos uso de un acumulador
I = I +2;
}
cout<<"\n La Suma es: "<<S;
cout<<"\n ";
system("PAUSE");
return 0;
}
Ejercicio WHILE03
#include <iostream.h>
int main()
{
int N;
int I, C;
cout<<"\n INGRESE ";
cout<<"\n ";
cout<<"\n Numero limite para contar los valores: "; cin>>N;
I = 2;
C = 0;
while ( I < N)
{
C = C + 1; // hacemos uso de un CONTADOR
I = I +2;
}
cout<<"\n EL TOTAL DE NUMERO ES : "<<C;
cout<<"\n ";
system("PAUSE");
return 0;
}
Ejercicio WHILE04
#include <iostream.h>
int main()
{
int N1, N2;
int I, C;
cout<<"\n INGRESE ";

68

cout<<"\n ";
cout<<"\n Numero limite inferior para contar los valores: "; cin>>N1;
cout<<"\n Numero limite superior para contar los valores: "; cin>>N2;
if (N1%2==0)
I=N1;
else
I=N1+1;
C = 0;
while ( I <= N2)
{
C = C + 1; // hacemos uso de un CONTADOR
I = I +2;
}
cout<<"\n EL TOTAL DE NUMERO ES : "<<C;
cout<<"\n ";
system("PAUSE");
return 0;
}
Ejercicio WHILE05
#include <iostream.h>
int main()
{
int N;
int I, S, M;
cout<<"\n INGRESE ";
cout<<"\n ";
cout<<"\n Numero limite para contar los valores: "; cin>>N;
I = 3;
S = 0;
M = 1;
while ( I < N)
{
S = S + I; // hacemos uso de un Acumulador
M = M*I; // hacemos uso de una multiplicacion
I = I +3;
}
cout<<"\n LA SUMA ES : "<<S;
cout<<"\n EL PRODUCTO ES : "<<M;
cout<<"\n ";
system("PAUSE");
return 0;
}

Ejercicio WHILE06
#include <iostream.h>
int main()
{

69

int N;
int C, S, M;
cout<<"\n INGRESE ";
cout<<"\n ";
cout<<"\n NUMERO ENTERO: "; cin>>N;
S=0;
M=1;
while (N!=0)
{
C=N%10;
S=S+C;
M=M*C;
N=N/10;
}
cout<<"\n LA SUMA ES : "<<S;
cout<<"\n EL PRODUCTO ES : "<<M;
cout<<"\n ";
system("PAUSE");
return 0;
}
Ejercicio WHILE07
#include <iostream.h>
int main()
{
int N;
int C, S;
cout<<"\n INGRESE ";
cout<<"\n ";
cout<<"\n NUMERO ENTERO: "; cin>>N;
S=0;
while (N!=0)
{
C=N%10;
if(C%2!=0)
S=S+C;
N=N/10;
}
cout<<"\n LA SUMA ES : "<<S;
cout<<"\n ";
system("PAUSE");
return 0;
}

Ejercicio WHILE08
#include <iostream.h>
int main()
{
int N;

70

int C, D, S1, S2, SW;


cout<<"\n INGRESE ";
cout<<"\n ";
cout<<"\n NUMERO ENTERO: "; cin>>N;
S1=0;
S2=0;
SW=0;
while (N!=0)
{
C=N%10;
if(SW==0)
{
S1= S1 + C;
SW=1;
}
else
{
S2= S2 + C;
SW=0;
}
N=N/10;
}
D= S1-S2;
cout<<"\n LA DIFERENCIA ES : "<<D;
cout<<"\n ";
system("PAUSE");
return 0;
}

Ejercicio WHILE09
#include <iostream.h>
#include <math.h>
int main()
{
int N, B;
int R, I;
double NC;
cout<<"\n INGRESE ";
cout<<"\n ";
cout<<"\n NUMERO ENTERO EN EL SISTEMA DECIMAL: "; cin>>N;
cout<<"\n LA BASE DEL NUEVO SISTEMA DE NUMERACION: "; cin>>B;
NC=0;
I=0;
while (N!=0)
{
R=N%B;
NC=NC + R*pow(10,I);
I=I+1;
N=N/B;
}
cout<<"\n EL NUMERO EN LA BASE "<<B<<" ES : "<<NC;

71

cout<<"\n ";
system("PAUSE");
return 0;
}
Ejercicio DO_WHILE03
#include <iostream.h>
int main()
{
int N;
int I, S, C;
cout<<"\n INGRESE ";
cout<<"\n ";
cout<<"\n Numero limite: ";cin>>N;
S = 0;
C = 0;
I = 5;
do
{
S = S + I;
C = C +1;
I = I + 5;
}
while ( I <= N);
cout<<"\n La Suma es: "<<S;
cout<<"\n La Cantidad de numeros sumados es: "<<C;
cout<<"\n ";
system("PAUSE");
return 0;
}
Ejercicio DO_WHILE04
#include <iostream.h>
int main()
{
float A, L, B, H, R, b;
int OP;
int Resp;
do
{
cout<<"\n Que Area desea determinar ";
cout<<"\n 1. Cuadrado ";
cout<<"\n 2. Tiangulo ";
cout<<"\n 3. Circulo ";
cout<<"\n 4. Trapecio ";
cout<<"\n Opcion "; cin>>OP;
switch (OP)
{
case 1:
cout<<"\n Ingrese ";

72

cout<<"\n El lado "; cin>>L;


A = L*L;
cout<<"\n El area del cuadrado es : "<<A;
break;
case 2:
cout<<"\n Ingrese ";
cout<<"\n La Base "; cin>>B;
cout<<"\n La Altura "; cin>>H;
A = B*H;
cout<<"\n El area del Triangulo es : "<<A;
break;
case 3:
cout<<"\n Ingrese ";
cout<<"\n El radio ";cin>>R;
A = 3.1415*R*R;
cout<<"\n El area del Circulo es : "<<A;
break;
case 4:
cout<<"\n Ingrese ";
cout<<"\n La Base mayor "; cin>>B;
cout<<"\n La Base menor "; cin>>b;
cout<<"\n La Altura "; cin>>H;
A = ((B+b)/2)*H;
cout<<"\n El area del Trapecio es : "<<A;
break;
default:
cout<<"\n Opcion Incorrecta ";
}
cout<<"\n Desea Continuar SI = 9 / NO = 0? ";cin>>Resp;
} while ( Resp == 9);
cout<<"\n ";
system("PAUSE");
return 0;
}
Ejercicio DO_WHILE06
#include <iostream.h>
int main()
{
int N;
int C, I, F, MAYOR=0;
cout<<"\n INGRESE ";
cout<<"\n ";
cout<<"\n NUMERO ENTERO: "; cin>>N;
do
{
C=N%10;
if (C > MAYOR)
MAYOR=C;
N=N/10;
}while (N!=0);
F=1;
I=1;

73

do
{
F=F*I;
I=I+1;
}while (I<=MAYOR);
cout<<"\n El factorial de la mayor cifra es : "<<F;
cout<<"\n ";
system("PAUSE");
return 0;
}
Ejercicio FOR02
#include <iostream.h>
int main()
{
int N;
int I, S;
cout<<"\n INGRESE ";
cout<<"\n ";
cout<<"\n Numero limite para la suma : ";cin>>N;
S = 0;
for ( I = 2; I <= N; I=I+2)
S = S + I; // hacemos uso de un acumulador
cout<<"\n La Suma es: "<<S;
cout<<"\n ";
system("PAUSE");
return 0;
}
Ejercicio FOR03
#include <iostream.h>
int main()
{
int N1, N2;
int I, C;
cout<<"\n INGRESE ";
cout<<"\n ";
cout<<"\n Numero limite inferior del rango : ";cin>>N1;
cout<<"\n Numero limite superior del rango : ";cin>>N2;
C = 0;
for ( I = N1; I <= N2; I++)
if(I%5==0)
C = C + 1; // hacemos uso de un CONTADOR
cout<<"\n El total de numeros multiplos de 5 es: "<<C;
cout<<"\n ";
system("PAUSE");
return 0;
}

74

Ejercicio FOR04
#include <iostream.h>
int main()
{
int N;
int C, I;
cout<<"\n INGRESE ";
cout<<"\n ";
cout<<"\n NUMERO ENTERO : "; cin>>N;
C=0;
for(I=1; I<=N; I++)
if (N%I==0)
C=C+1;
if(C==2)
cout<<"\n El numero "<<N<<" es un numero primo absoluto";
else
cout<<"\n El numero "<<N<<" NO es un numero primo absoluto";
cout<<"\n ";
system("PAUSE");
return 0;
}
Ejercicio FOR05
#include <iostream.h>
int main()
{
int N;
int A, S, T, I;
cout<<"\n INGRESE ";
cout<<"\n ";
cout<<"\n NUMERO ENTERO QUE LIMITA LA SERIE DE FIBONACCI : ";
cin>>N;
A=0;
S=1;
cout<<"\n "<<A<<";"<<S;
for(I=3; I<=N; I++)
{
T= A+ S;
cout<<";"<<T;
A=S;
S=T;
}
cout<<"\n ";
system("PAUSE");
return 0;
}
Ejercicio FUNCION02

75

#include <iostream.h>
//funcin que permite sumar, restar, multiplicar y dividir dos nmeros
enteros
float operacion(int A, int B, char OP)
{
float RESULTADO;
switch (OP)
{
case '+':
RESULTADO= A+B;
break;
case '-':
RESULTADO= A-B;
break;
case '*':
RESULTADO= A*B;
break;
case '/':
if (A!=0 && B!=0)
{
RESULTADO= static_cast<float>(A)/static_cast<float>(B);
}
break;
}
return RESULTADO;
}
// fin de la funcin
int main()
{
int X, Y;
char O;
float RESUL;
cout<<"\n INGRESE ";
cout<<"\n ";
cout<<"\n Primer numero : ";cin>>X;
cout<<"\n Segundo numero : ";cin>>Y;
O='+';
RESUL= operacion(X, Y, O); //Se invoca a la funcion
cout<<"\n La suma es : "<<RESUL;
O='-';
RESUL= operacion(X, Y, O); //Se invoca a la funcion
cout<<"\n La resta es : "<<RESUL;
O='*';
RESUL= operacion(X, Y, O); //Se invoca a la funcion
cout<<"\n La multiplicacion es : "<<RESUL;
O='/';
RESUL= operacion(X, Y, O); //Se invoca a la funcion
cout<<"\n La division es : "<<RESUL;
cout<<"\n ";
system("PAUSE");
return 0;
}

76

Ejercicio ARREGLO03
#include <iostream.h>
int main()
{
int NUM[10];
int I, S;
float PROM;
cout<<"\n INGRESE 10 NUMEROS ENTEROS ";
cout<<"\n ";
for ( I=1; I<=10;I++)
cin>>NUM[I];
cout<<"\n ";
//SUMANDO LOS ELEMENTOS
S=0;
for ( I=1; I<=10;I++)
S = S + NUM[I];
// PROMEDIO
PROM = static_cast<float>(S)/10;
cout<<"\n LA SUMA ES: "<<S;
cout<<"\n EL PROMEDIO ES: "<<PROM;
cout<<"\n ";
system("PAUSE");
return 0;
}
Ejercicio ARREGLO06
#include <iostream.h>
int main()
{
int NUM[10];
int I, J, AUX, MENOR;
float RESULTADO;
cout<<"\n INGRESE 10 NUMEROS ENTEROS ";
cout<<"\n ";
for ( I=1; I<=10;I++)
cin>>NUM[I];
cout<<"\n ";
// haciendo uso del metodo de la burbuja
for ( I=1; I<=9;I++)
for ( J=I + 1; J<=10;J++)
if (NUM[J] < NUM[I])
{
AUX = NUM[I];
NUM[I]= NUM[J];
NUM[J]= AUX;
}
cout<<"\n ";
//DETERMINAR EL NUMERO MENOR DIFERENTE DE CERO
for ( I=1; I<=10;I++)

77

if (NUM[I]!=0)
{
MENOR=NUM[I];
break;
}
RESULTADO= static_cast<float>(NUM[10])/static_cast<float>(MENOR);
cout<<"\n EL RESULTADO DE LA DIVISION ES: "<<RESULTADO;
cout<<"\n ";
system("PAUSE");
return 0;
}
Ejercicio ARREGLO08
#include <iostream.h>
int main()
{
int NUM[10], PRI[10], NPRI[10];
int I, J, C;
int K=1, N=1;
cout<<"\n INGRESE 10 NUMEROS ENTEROS ";
cout<<"\n ";
for ( I=1; I<=10;I++)
cin>>NUM[I];
cout<<"\n ";
for ( I=1; I<=10;I++)
{
PRI[I]=0;
NPRI[I]=0;
}
// DETERMINANDO LOS PRIMOS ABSOLUTOS
for ( I=1; I<=10;I++)
{
C=0;
for ( J=1; J<=NUM[I];J++)
if(NUM[I]%J==0)
C=C+1;
if (C==2)
{
PRI[K]=NUM[I];
K=K+1;
}
else
{
NPRI[N]=NUM[I];
N=N+1;
}
}
// PRESENTAR LOS VECTORES
for ( I=1; I<=10;I++)
cout<<PRI[I]<<" ";
cout<<"\n ";
for ( I=1; I<=10;I++)

78

cout<<NPRI[I]<<" ";
cout<<"\n ";
system("PAUSE");
return 0;
}
Ejercicio ARREGLOBI03A
#include <iostream.h>
int main()
{
int NUM[3][4];
int I, J, S;
for ( I=1; I<=3; I++)
{
cout<<"\n INGRESE 4 NUM. ENTEROS DE LA FILA "<<I<<"\n ";
for ( J=1; J<=4;J++)
cin>>NUM[I][J];
}
// sumado los numerous por fila
for ( I=1; I<=3; I++)
{
S=0;
for ( J=1; J<=4;J++)
S= S + NUM[I][J];
cout<<"\n suma de la fila "<<I<<" es :"<<S;
}
cout<<"\n ";
system("PAUSE");
return 0;
}
Ejercicio ARREGLOBI03B
#include <iostream.h>
int main()
{
int NUM[3][4];
int S[3];
int I, J;
for ( I=1; I<=3; I++)
{
cout<<"\n INGRESE 4 NUM. ENTEROS DE LA FILA "<<I<<"\n ";
for ( J=1; J<=4;J++)
cin>>NUM[I][J];
}
// sumado los numeros por fila
for ( I=1; I<=3; I++)
{

79

S[I]=0;
for ( J=1; J<=4;J++)
S[I]= S[I] + NUM[I][J];
}
//mostrar la matriz con los resultados por fila
for ( I=1; I<=3; I++)
{
for ( J=1; J<=4;J++)
cout<<NUM[I][J]<<" ";
cout<<S[I]<<"\n ";
}
cout<<"\n ";
system("PAUSE");
return 0;
}

80

También podría gustarte